어떤 String의 SubString에 존재하는 값을 찾기 위해, 원본 String을 이용하는 것이 더 좋습니다.

 

특정 Offset을 시작으로 하는, 하위 문자열을 만들 때 str.substring(beginIndex).indexOf(char1)과 같은 코드를 사용할 수 있습니다. 이는 잘 작동하는 방식이지만 substring 메소드 호출이 새로운 문자열을 만들게 합니다. 반복문에서 이 작업을 반복해서 실행하면 String이 아무 의미 없이 마구잡이로 생성됩니다. 그리고 str의 크기가 크다면 성능에 큰 문제가 발생될 수 있습니다.

성능 문제를 해결하려면 String.substring(beginIndex)과 다음과 같은 메서드를 혼용해서 사용해선 안 됩니다:

  • indexOf(int ch)
  • indexOf(String str)
  • lastIndexOf(int ch)
  • lastIndexOf(String str)
  • startsWith(String prefix)

이러한 메소드들은 추가 매개 변수를 이용하는 다른 대안이 존재합니다.

이러한 대안들을 사용하면 추가적인 String이 의미없이 생성되지 않습니다. indexOf 메소드의 경우, substring 인덱스 파라미터 값을 빼서 동일한 결과를 얻게 만들 수 있습니다.

규칙을 어긴 코드

str.substring(beginIndex).indexOf(char1); // 규칙을 어긴 코드; "substring"이 실행되면 새로운 문자열이 만들어 질 것 입니다.

규칙을 준수한 해결책

str.indexOf(char1, beginIndex) - beginIndex; // char1을 위한 인덱스를 찾지 못한 경우 ( => -1 -beginIndex)

If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project