구현하기 쉽고 빠른 또 다른 해법은 문자열 내 문자를 순회하며(한 번 순회) 각 문자를 주어진 문자와 비교하는 것이다. 같을 때마다 카운터를 1 증가시킨다.
public static int countOccurrencesOfACertainCharacter(
String str, char ch) {
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ch) {
count++;
}
}
return count;
}
유니코드 대리 쌍을 처리하는 해법은 이 책의 예제 코드에 들어 있다. 자바 8 함수형 스타일로 문제를 해결하려면 filter()나 reduce()를 사용한다. 다음은 filter()를 사용한 코드다.
public static long countOccurrencesOfACertainCharacter(
String str, char ch) {
return str.chars()
.filter(c -> c == ch)
.count();
}
유니코드 대리 쌍을 처리하는 해법은 이 책의 예제 코드에 들어 있다.
TIP ≣ 외부 라이브러리 지원을 받으려면 아파치 커먼즈 랭의 StringUtils.countMatches()와 스프링 프레임워크의 StringUtils.countOccurrencesOf(), 구아바의 CharMatcher.is().countIn()을 활용한다.