1

我正在尝试检查字符串中是否存在一系列数字比这更优雅的方式吗?

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

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

4

4 回答 4

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");
}
于 2012-08-27T06:59:04.377 回答
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()));
}
于 2012-08-27T06:58:34.403 回答
0

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

于 2012-08-27T07:11:37.937 回答
0

我认为您的问题措辞含糊……您是否要检查输入字符串是否包含 51-55 范围内的数字?(您的书面文本似乎暗示了这一点)在这种情况下,字符串“512 是 2 的幂”将不匹配,因为它不包含数字 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
  • 以字符串开头或非数字字符开头
  • 后跟字符串的结尾,或非数字字符
于 2012-08-27T08:43:56.723 回答