더북(TheBook)

021 문자열 앞과 뒤 공백 제거

 

아마도 가장 간단한 해법은 String.trim() 메서드를 활용하는 방법일 것이다. 이 메서드는 앞과 뒤의 공백, 즉 코드 포인트가 32(공백 문자)이거나 U+0020보다 작거나 같은 모든 문자를 제거한다.

String text = "\n \n\n hello \t \n \r";
String trimmed = text.trim();

위 코드는 예상한 대로 동작한다. 공백을 제거한 문자열은 hello다. 문자열에 쓰인 여백이 전부U+0020보다 작거나 32(공백 문자)이므로 문제없이 동작한다. 여백으로 정의된 문자는 25개인데(https://en.wikipedia.org/wiki/Whitespace_character#Unicode), trim()은 그중 일부만 처리한다(간단히 말해 trim()은 유니코드를 인식하지 못한다). 아래 문자열을 보자.

char space = '\u2002';
String text = space + "\n \n\n hello \t \n \r" + space;

\u2002trim()이 인식하지 못하는 또 다른 종류의 여백이다(\u2002\u0020보다 크다). 이러한 경우에는 trim()이 기대한 것처럼 동작하지 않는다. 이 문제를 해결하기 위해 JDK 11부터 strip()이 도입됐다. strip() 메서드는 trim()의 기능을 유니코드의 영역까지 확장한다.

String stripped = text.strip();

이제 앞과 뒤 모든 여백을 제거한다.

Info ≣ JDK 11에는 앞 여백만 제거하는 메서드(stripLeading())와 뒤 여백만 제거하는 메서드(stripTrailing())도 추가됐다. trim() 메서드에는 이러한 메서드가 없다.

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