Heim >Java >javaLernprogramm >Wie zähle ich Teilstring-Vorkommen in einem Java-String korrekt?
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!