x = x.replaceAll("\\s", "");
x = x.replaceAll("\\s+", " ");
's' 한 번에 하나의 공백 매치를 대체하지만 's+'는 두 번째 매개변수로 전체 공백 시퀀스를 한 번에 대체합니다.
예를 들어 다음과 같은 경우:
String x = " text with WhiteSpace! ";
-- ex_1)
x.replaceAll("\\s", "_");
x == "_text____with______WhiteSpace!__";
-- ex_2)
x.replaceAll("\\s+", "_");
x == "_text_with_WhiteSpace!_";
-- ex_3)
x.trim().split("\\s+");
x == ["text", "with", "WhiteSpace!"]
-- ex_4)
x.trim().split("[ ]+");
x == ["text", "with", "WhiteSpace!"]
두 예제의 차이점은 정규 표현식에서 사용하는 패턴에 있습니다.
- x.trim().split("\\s+"): \\s+는 모든 공백 문자(스페이스, 탭, 줄 바꿈 등)를 의미합니다.
- x.trim().split("[ ]+"): [ ]+는 한 개 이상의 공백 문자(스페이스)만을 의미합니다.
성능 차이
- split("\\s+") 는 모든 종류의 공백 문자(스페이스, 탭, 줄 바꿈 등)를 처리하기 때문에, 정규식 엔진이 더 많은 작업을 수행하게 됩니다.
- split("[ ]+") 는 공백(스페이스) 하나만을 처리하므로 더 간단한 정규식이며, 일반적으로 성능이 더 빠릅니다.
결론
- x.trim().split("[ ]+") 이 일반적으로 더 빠를 것입니다.
- 단, 텍스트에 스페이스 이외의 공백 문자가 포함될 가능성이 있거나 모든 공백 문자를 고려해야 한다면 split("\\s+")를 사용하는 것이 적절합니다.