006 문자 빈도수 세기
이 문제를 간단하게 푸는 방법은 다음 두 단계다.
1. 주어진 문자열에서 해당 문자를 전부 ""로 치환한다(사실상 주어진 문자열에서 해당 문자를 전부 제거하는 것이다).
2. 원래 문자열의 길이에서 첫 번째 단계에서 얻은 문자열의 길이를 뺀다.
코드로 구현하면 다음과 같다.
public static int countOccurrencesOfACertainCharacter(
String str, char ch) {
return str.length() - str.replace(String.valueOf(ch), "").length();
}
아래 해법은 유니코드 대리 쌍까지 처리한다.
public static int countOccurrencesOfACertainCharacter(
String str, String ch) {
if (ch.codePointCount(0, ch.length()) > 1) {
// 주어진 문자열에 유니코드 문자가 둘 이상이면
return -1;
}
int result = str.length() - str.replace(ch, "").length();
// ch.length()가 2를 반환하면 유니코드 대리 쌍이라는 뜻이다
return ch.length() == 2 ? result / 2 : result;
}