> Java > java지도 시간 > Java 문자열에서 하위 문자열 발생을 올바르게 계산하는 방법은 무엇입니까?

Java 문자열에서 하위 문자열 발생을 올바르게 계산하는 방법은 무엇입니까?

DDD
풀어 주다: 2025-01-04 15:25:40
원래의
513명이 탐색했습니다.

How to Correctly Count Substring Occurrences in a Java String?

문자열에서 하위 문자열의 발생 횟수를 찾는 방법

많은 개발자가 하위 문자열의 빈도를 확인하려고 할 때 문제에 직면합니다. 주어진 문자열 내에서 발생합니다. 이러한 사례 중 하나는 다음 알고리즘과 관련됩니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿