/ / Finden aller 3 Zeichenlängen-Teilzeichenfolgen in einer Zeichenfolge [geschlossen] - Java, Regex

Alle Teilstrings mit 3 Zeichen Länge in einem String finden [closed] - java, regex

Ich versuche, alle drei Buchstaben-Teilstrings aus einer Zeichenfolge in Java zu finden.

Zum Beispiel aus der Zeichenfolge "example string" sollte ich "exa", "xam", "amp", "mpl", "ple", "str", "tri", "rin", "ing" erhalten.

Ich habe versucht, den Java Regular Ausdruck "([a-zA-Z]) {3}" zu verwenden, aber ich habe nur "exa", "mpl", "str", "ing".

Kann mir jemand eine Regex oder Methode sagen, um das zu korrigieren?

Antworten:

7 für die Antwort № 1

Implementieren Sie Juvanis "Idee etwas, iterieren Sie, um Ihre Teilzeichenfolgen zu erhalten, und verwenden Sie dann einen regulären Ausdruck, um sicherzustellen, dass die Teilzeichenfolge alle Buchstaben ist:

String s = "example string";
for (int i = 0; i <= s.length() - 3; i++) {
String substr = s.substring(i, i + 3);
if (substr.matches("[a-zA-Z]+")) { System.out.println(substr); }
}

3 für die Antwort № 2

Wenn ein Zeichen in einem regulären Ausdruck verbraucht wird, kann es nicht in anderen Regexs verwendet werden. In Ihrem Beispiel ein wird konsumiert Exa damit Ampere wird nicht als Ausgabe aufgelistet. Sie sollten den traditionellen iterativen Ansatz ausprobieren. Es ist einfacher zu implementieren.


3 für die Antwort № 3

Versuche dies

    Matcher m = Pattern.compile("([a-zA-Z]){3}").matcher("example string");
for (int i = 0; m.find(i); i = m.start() + 1) {
System.out.print(m.group() + " ");
}

Ausgabe

exa xam amp mpl ple str tri rin ing

1 für die Antwort № 4

Dies kann mit Regex wie folgt geschehen:

  1. Suchen Sie die Position aller Übereinstimmungen für die Zeichenfolge mithilfe der Regex w(?=ww). Dadurch erhalten Sie den Startindex des ersten Zeichens jeder erforderlichen Unterzeichenfolge.

    In diesem Fall erhalten Sie: 0, 1, 2, 3, 4, 8, 9, 10 und 11.

  2. Holen Sie, was Sie brauchen, indem Sie die Sub-Strings beginnend von jeder Position bis zu plus 2 nehmen.

    In diesem Fall würde das bedeuten, my_string.substring(0,3), my_string.substring(1,4) usw., da der Begin-Index-Parameter eingeschlossen ist, während der End-Index-Parameter exklusiv ist.