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!"]

 

두 예제의 차이점은 정규 표현식에서 사용하는 패턴에 있습니다.

  1. x.trim().split("\\s+"): \\s+는 모든 공백 문자(스페이스, 탭, 줄 바꿈 등)를 의미합니다.
  2. x.trim().split("[ ]+"): [ ]+는 한 개 이상의 공백 문자(스페이스)만을 의미합니다.

성능 차이

  • split("\\s+") 는 모든 종류의 공백 문자(스페이스, 탭, 줄 바꿈 등)를 처리하기 때문에, 정규식 엔진이 더 많은 작업을 수행하게 됩니다.
  • split("[ ]+") 는 공백(스페이스) 하나만을 처리하므로 더 간단한 정규식이며, 일반적으로 성능이 더 빠릅니다.

결론

  • x.trim().split("[ ]+") 이 일반적으로 더 빠를 것입니다.
  • 단, 텍스트에 스페이스 이외의 공백 문자가 포함될 가능성이 있거나 모든 공백 문자를 고려해야 한다면 split("\\s+")를 사용하는 것이 적절합니다.

+ Recent posts