강조한 코드 부분은 아래처럼 작성해도 된다.
String ch = String.valueOf(Character.toChars(str.codePointAt(i)));
if (i < str.length() - 1 && str.codePointCount(i, i + 2) == 1) {
i++;
}
덧붙여 자바 8 함수형 스타일로 유니코드 대리 쌍을 처리하려면 다음과 같이 다시 작성한다.
public static Map<String, Long> countDuplicateCharacters(String str) {
Map<String, Long> result = str.codePoints()
.mapToObj(c -> String.valueOf(Character.toChars(c)))
.collect(Collectors.groupingBy(c -> c, Collectors.counting()));
return result;
}
Info ≣ 외부 라이브러리 지원을 받으려면 구아바(Guava)의 Multiset<String>을 활용한다.
앞으로 나올 문제 중에 아스키와 16비트 유니코드, 유니코드 대리 쌍까지 처리하는 해법을 제공하는 문제도 있다. 무작위로 골랐을 뿐이니 이러한 해법을 활용해 해법이 제공되지 않은 문제에도 쉽게 해법을 작성할 수 있다.