더북(TheBook)

강조한 코드 부분은 아래처럼 작성해도 된다.

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비트 유니코드, 유니코드 대리 쌍까지 처리하는 해법을 제공하는 문제도 있다. 무작위로 골랐을 뿐이니 이러한 해법을 활용해 해법이 제공되지 않은 문제에도 쉽게 해법을 작성할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.