5

私のアプリケーションには、一連のランダムな文字 [aZ] と [0-9] だけでなく、";"、"/"、"?"、":"、"@" を含む (大きな) 文字列ファイルがあります。6 桁が連続して表示される最も近い位置 (「105487」や「558463」など) をアプリケーションに教えてもらいたいです。

これを達成するための最良の方法は何ですか?ご検討いただきありがとうございます。

4

3 に答える 3

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());
}

これは仕事をするでしょう。

(コードサンプルはこちらから)

于 2012-10-01T21:28:21.010 に答える
3

文字列の文字を繰り返しながらCharacter.isDigitを使用し、6 つの連続する数字が見つかるまで数字を数えるか、シーケンスが壊れている場合はリセットします。インデックスを追跡すると、減算によって最も近い位置を簡単に計算できます。

これはあまり効率的ではありませんが、文字列が大きすぎない場合はO(n)で十分だと思います。最適化については、Luiggi Mendozaがコメントで提案した内容をご覧ください。

于 2012-10-01T21:24:14.350 に答える
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"
  }
}
于 2012-10-01T21:25:13.163 に答える