我正在尝试检查字符串中是否存在一系列数字 还有比这更优雅的方式吗?
if (ccnumeric.contains("51")
|| ccnumeric.contains("52")
|| ccnumeric.contains("53")
|| ccnumeric.contains("54")
|| ccnumeric.contains("55"))
我无法想到任何满足此功能的方法,因为我正在检查字符串中的int范围。
答案 0 :(得分: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");
}
答案 1 :(得分: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()));
}
答案 2 :(得分:0)
您的问题有点模糊,例如字符串“541”,1(541),3(5,4,1),6(5,4,1,54,41,541)中有多少个数字?根据您定义的方式,您的正则表达式会发生很大变化。如果您的答案是1,那么解决方案非常简单,贪婪搜索所有长度与您的最小值相同且小于或等于最大值的数字(然后您可以根据最小值和最大值解析匹配和过滤) ...如果是其中一个,那么你的解决方案会变得有点复杂,你基本上必须创建一个滑动窗口来评估字符串中所有可能的组合。
答案 3 :(得分: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
}
基本上,这样做是为了寻找