Java - 如何在字符串中搜索6个随机数

时间:2012-10-01 21:20:45

标签: java string indexof digits

我的应用程序中有一个(大)字符串文件,其中包含一系列随机字符[aZ]和[0-9]以及“;”,“/”,“?”,“:”和“@” ”。我希望我的申请告诉我连续显示6位数的最近位置(如“105487”或“558463”)。

实现这一目标的最佳方法是什么? 感谢您对此进行调查。

3 个答案:

答案 0 :(得分:4)

你可以使用正则表达式。

String regex = "(\\d{6})";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(YOU STRING HERE);
// Check all occurrences
while (matcher.find()) {
    System.out.print("Start index: " + matcher.start());
    System.out.print(" End index: " + matcher.end());
    System.out.println(" Found: " + matcher.group());
}

这可以胜任。

(来自here的代码示例)

答案 1 :(得分:3)

在迭代字符串的字符时使用Character.isDigit,然后计算一个数字,直到找到6个连续的数字,或者如果序列中断则重置它。跟踪索引,您只需通过减法计算最近的位置。

这不是很有效,但我认为如果字符串不是太大, O(n)就足够了。有关优化,请查看 Luiggi Mendoza 在评论中建议的内容。

答案 2 :(得分:1)

有效的方法是迭代字符串的字符并测试每个字符是否为数字。找到匹配后继续查找序列的其余部分。像

这样的东西
int nDigits=0, i = 0;
CharacterIterator it = new StringCharacterIterator("very long string123456");
for (char ch=it.first(); ch != CharacterIterator.DONE; ch=it.next()) {
  i++;
  nDigits = (ch.isDigit() ? nDigits++ : 0);
  if (nDigits == 5) {
      // DONE. Position is "i"
  }
}