我有字符串:
String myString1 = "22223 2342 1 98 333 3 665"
String myString2 = "22323 3 222 34 33 1 98"
我只想提取具有 1 位数字的值,然后是空格,然后只有两位数字。
private static final Pattern p3DigitsGap = Pattern.compile(".*\\b\\d\\s\\d{2}\\b.*");
在上述两个字符串中,我希望提取“1 98”,如果模式位于字符串的末尾,我不能只用空格分割。
Matcher matcher = p3DigitsGap.matcher(myString1);
if (matcher.find()) {
Log.i("Matcher found");
while (matcher.find() == true) {
Log.i("Matcher is true");
String extract = matcher.group(1);
Log.d("extract: " + extract);
}
}
如果我删除 while 循环,则永远不会填充字符串提取并引发越界异常。我在 while 循环中添加了 matcher.find() 不等于 true。
我尝试将我的模式交换为:
Pattern p3DigitsGap = Pattern.compile("[^0-9a-z]\\d\\s\\d{2}[^0-9a-z]");
我认为使用 .*\\b 可能会导致问题,但我得到了相同的结果。
请有人可以帮助我了解我哪里出错了。
提前致谢。
答案编辑:我将 Reimeus 的答案标记为正确,因为它通过使用具有上述正则表达式的组来工作。另请参阅 Tim Pietzcker 的答案,以了解改进我原来的正则表达式的替代解决方案。