Heim >Java >javaLernprogramm >Wie zähle ich Teilstring-Vorkommen in einem Java-String korrekt?

Wie zähle ich Teilstring-Vorkommen in einem Java-String korrekt?

DDD
DDDOriginal
2025-01-04 15:25:40514Durchsuche

How to Correctly Count Substring Occurrences in a Java String?

So ermitteln Sie die Häufigkeit des Vorkommens eines Teilstrings in einem String

Viele Entwickler stoßen auf Probleme, wenn sie versuchen, die Häufigkeit eines Teilstrings zu bestimmen Vorkommen innerhalb einer bestimmten Zeichenfolge. Ein solcher Fall betrifft den folgenden Algorithmus:

String str = "helloslkhellodjladfjhello";
String findStr = "hello";
int lastIndex = 0;
int count = 0;

while (lastIndex != -1) {
    lastIndex = str.indexOf(findStr, lastIndex);

    if (lastIndex != -1)
        count++;

    lastIndex += findStr.length();
}

System.out.println(count);

Warum schlägt der Algorithmus fehl?

Obwohl das erste Vorkommen von „hello“ bei Index 0 erfolgreich identifiziert wurde, wurde der Der Algorithmus gerät bei der Suche nach nachfolgenden Vorkommen in eine Endlosschleife. Dies liegt daran, dass lastIndex findStr.length() nach dem ersten Vorkommen gleich 5 wird, das nächste von indexOf() zurückgegebene „-1“-Ergebnis jedoch dazu führt, dass die while-Schleife erneut iteriert, wobei lastIndex immer noch auf 0 gesetzt ist.

Wie kann das Problem gelöst werden?

Es gibt mehrere Möglichkeiten, dieses Problem zu beheben. Eine Möglichkeit besteht darin, eine andere Teilstring-Suchmethode zu verwenden, beispielsweise StringUtils.countMatches() von Apache Commons Lang. Hier ist ein Beispiel:

String str = "helloslkhellodjladfjhello";
String findStr = "hello";

System.out.println(StringUtils.countMatches(str, findStr)); // Outputs 3

Alternativ können Sie den ursprünglichen Algorithmus ändern, um den Fall „-1“ zu behandeln:

String str = "helloslkhellodjladfjhello";
String findStr = "hello";
int lastIndex = 0;
int count = 0;

while (lastIndex != -1) {
    lastIndex = str.indexOf(findStr, lastIndex);

    if (lastIndex != -1) {
        count++;
        lastIndex += findStr.length();
    } else {
        break; // Exit the loop if no more occurrences are found
    }
}

System.out.println(count); // Outputs 3

Das obige ist der detaillierte Inhalt vonWie zähle ich Teilstring-Vorkommen in einem Java-String korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn