2012-08-27 115 views
1

我想检查一个字符串中是否存在一个数字范围 有没有比这更优雅的方法?检查字符串中的int范围的Java检查

if (ccnumeric.contains("51") 
    || ccnumeric.contains("52") 
    || ccnumeric.contains("53") 
    || ccnumeric.contains("54") 
    || ccnumeric.contains("55")) 

我想不出任何满足这个的方法,因为我正在检查字符串中的int范围。

回答

6

你可以使用一个简单的正则表达式:5[12345]{1}寻找一个5后紧跟一个1, 2,3,4或5:

String s = "55"; 
Pattern p = Pattern.compile("5[12345]{1}"); 
if (p.matcher(s).find()) { 
    System.out.println("Found"); 
} else { 
    System.out.println("Not Found"); 
} 
+0

+1,但你可以使用'Matcher.find'而不是'* .bla。*'。 – dacwe

+0

@dacwe好点 - 编辑。 – assylias

+0

'[1-5]'而不是'[12345]'如何? – maba

1

也许你可以尝试正则表达式。

例如

Pattern.matches(".*5[1-5].*", ccnumeric); 

编辑: 要查找所有数字的字符串:

List<Integer> allMatches = new ArrayList<Integer>(); 
Matcher m = Pattern.compile("(\\d+)").matcher(ccnumeric); 
while (m.find()) { 
    allMatches.add(Integer.parse(m.group())); 
} 
+0

+1但是,如果范围从29到41,则工作得不太好。 – Thilo

0

您的问题有点含糊,例如字符串“541”,1(541),3(5,4,1),6(5,4,1,54,41,541)中有多少个数字?取决于你如何定义你的regexes会有相当大的变化。如果你的答案是1,那么解决方案非常简单,就是贪婪搜索所有数字,其长度与你的最小值相同并小于或等于你的最大值(然后可以根据最小值和最大值解析匹配和过滤) ...如果其他人之一,那么你的解决方案会更复杂一点,你基本上将不得不创建一个滑动窗口来评估字符串中所有可能的组合。

+0

我想我的代码解释说,但无论如何它是51-55简单只有两个数字 – JackyBoi

0

我认为你的问题ambiguously phrased ...你是否希望检查输入字符串是否包含范围51-55内的数字? (您的书面文字似乎暗示了这一点)在这种情况下,字符串“512是两个幂”将不会匹配,因为它不包含数字51.

或者您是否希望检查字符串包含字符序列51,52,53,54或55? (你的代码似乎暗示了这一点)在这种情况下,字符串“512是2的幂”将是匹配的,因为它包含字符序列51.

如果第一个选项是这种情况, ð需要这样的东西:

Pattern p = Pattern.compile("(^|[^\\d])5[1-5]($|[^\\d])"); 
if (p.matcher(inputString).find()) { 
    //The inputString contains the number you seek 
} 

从本质上讲,这是什么东西做的是寻找

  • 一个字符序列51-55
  • 由字符串任初preceeded,或由非数字字符
  • 后跟字符串末尾或非数字字符