마지막으로 자바 8 함수형 스타일 해법을 살펴보자. 다음 네 단계를 거친다.
1. String.chars() 메서드를 사용해 문자열을 IntStream으로 변환한다.
2. IntStream을 필터링해 중복을 제거한다.
3. 결과 IntStream을 Stream<String>으로 매핑한다.
4. 이 스트림의 문자열을 조인해 하나의 문자열로 모은다.
위 해법을 코드로 작성하면 다음과 같다.
public static String removeCharacter(String str, char ch) {
return str.chars()
.filter(c -> c != ch)
.mapToObj(c -> String.valueOf((char) c))
.collect(Collectors.joining());
}
이 밖에 유니코드 대리 쌍을 삭제하려면 다음 구현처럼 codePointAt()과 codePoints()를 이용한다.
public static String removeCharacter(String str, String ch) {
int codePoint = ch.codePointAt(0);
return str.codePoints()
.filter(c -> c != codePoint)
.mapToObj(c -> String.valueOf(Character.toChars(c)))
.collect(Collectors.joining());
}
TIP ≣ 외부 라이브러리 지원을 받으려면 아파치 커먼즈 랭의 StringUtils.remove()를 활용한다.
다음으로 빈도수가 가장 큰 문자를 어떻게 찾는지 알아보자.