Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何在字符串中搜索6个随机数_Java_String_Indexof_Digits - Fatal编程技术网

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

Java-如何在字符串中搜索6个随机数,java,string,indexof,digits,Java,String,Indexof,Digits,我的应用程序中有一个(大)字符串文件,其中包含一系列随机字符[a-Z]和[0-9],还包含“;”、“/”、“?”、“:”和“@”。我希望我的应用程序告诉我连续显示6位数字的最近位置(如“105487”或“558463”) 实现这一目标的最佳方式是什么? 感谢您对此进行研究。在迭代字符串字符时使用,然后向上计数一个数字,直到找到6个连续数字,或者在序列中断时重置它。跟踪索引,您可以通过减法简单地计算最近的位置 这不是很有效,但我认为如果字符串不是太大,O(n)就足够了。对于优化,请查看Luiggi

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

实现这一目标的最佳方式是什么? 感谢您对此进行研究。

在迭代字符串字符时使用,然后向上计数一个数字,直到找到6个连续数字,或者在序列中断时重置它。跟踪索引,您可以通过减法简单地计算最近的位置

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

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

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"
  }
}
你可以用正则表达式

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());
}
这就行了


(样本代码)

请澄清“最近位置”。这是文件中的第一个事件吗?位置是指文件中的行号和列吗?是的,我指的是第一个事件。位置只是指java中indexOf函数作为数字给出的数字。您可以在这里找到您要查找的内容:您是在查找特定数字的序列还是任意数字的序列?对于非常大的字符串,它可能会失败,因为OOME为什么不改为使用REGEX\\d{6}?嗯,我不知道字符串有多长,但我认为这是一个很好的选择。谢谢你指出这一点。@gtgaxiola,好问题。我不记得了。。编辑。谢谢,谢谢。我也会尝试这种方法,但我认为Johan Sjöberg发布的答案最适合我的申请。谢谢你的回答。我认为这将是唯一的解决方案,但我希望java有一种更有效的方法来实现这一点。我将对此进行研究。@user1637234您可以使用类似于Lablabla发布的正则表达式。您可以对此进行优化:如果您在位置X中找到一个数字,请检查位置X+5中的字符,如果该字符不是一个数字,请从此处开始搜索。如果是数字,则返回(X+4,X+3…),直到找到一个非数字,然后从最小位置重新开始。@gtgaxiola是的,当我不能依赖正则表达式时,我最喜欢的字符串匹配算法之一。谢谢,我一定会尝试这个。