문자열에서 하위 문자열의 발생 횟수를 찾는 방법
많은 개발자가 하위 문자열의 빈도를 확인하려고 할 때 문제에 직면합니다. 주어진 문자열 내에서 발생합니다. 이러한 사례 중 하나는 다음 알고리즘과 관련됩니다.
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);
알고리즘이 실패하는 이유는 무엇입니까?
인덱스 0에서 "hello"의 첫 번째 항목을 성공적으로 식별했음에도 불구하고, 알고리즘은 후속 항목을 검색할 때 무한 루프에 들어갑니다. 이는 첫 번째 항목이 발견된 후 lastIndex findStr.length()가 5와 같아지지만 indexOf()가 반환한 다음 "-1" 결과로 인해 lastIndex가 여전히 0으로 설정된 상태에서 while 루프가 다시 반복되기 때문입니다.
어떻게 해결하나요?
이 문제를 해결하는 방법에는 여러 가지가 있습니다. 하나는 Apache Commons Lang의 StringUtils.countMatches()와 같은 다른 하위 문자열 검색 방법을 활용하는 것입니다. 예는 다음과 같습니다.
String str = "helloslkhellodjladfjhello"; String findStr = "hello"; System.out.println(StringUtils.countMatches(str, findStr)); // Outputs 3
또는 원래 알고리즘을 수정하여 "-1" 대소문자를 처리할 수 있습니다.
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
위 내용은 Java 문자열에서 하위 문자열 발생을 올바르게 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!