String::replaceAll
의 기본 구현은 java.util.regex.Pattern.compile()
을 매번 호출하도록 되어있습니다. (첫번째 인수 값이 정규표현이 아닌 경우에도)
이는 굉장히 큰 성능 문제를 야기하기 때문에, 사용에 매우 주의해야합니다.
String::replaceAll
을 사용하는 경우라면, 첫 번째 인수는 실제 정규식이어야 합니다.
그렇지 않다면, String::replace
이 정규식으로 인한 성능 저하 없이 String::replaceAll
과 정확히 동일한 작업을 수행하니 이를 사용하는 것이 좋습니다.
이 규칙은 각 String::replaceAll
의 첫 번째 인수가 특수 정규식 문자나 패턴을 포함하지 않는 경우에 알림을 울립니다.
규칙을 어긴 코드
String init = "Bob is a Bird... Bob is a Plane... Bob is Superman!";
String changed = init.replaceAll("Bob is", "It's"); // 규칙을 어긴 코드
changed = changed.replaceAll("\\.\\.\\.", ";"); // 규칙을 어긴 코드
규칙을 준수한 해결책
String init = "Bob is a Bird... Bob is a Plane... Bob is Superman!";
String changed = init.replace("Bob is", "It's");
changed = changed.replace("...", ";");
regex를 사용하고 싶다면 아래와 같이 사용합니다.
String init = "Bob is a Bird... Bob is a Plane... Bob is Superman!";
String changed = init.replaceAll("\\w*\\sis", "It's");
changed = changed.replaceAll("\\.{3}", ";");
같이보면 좋은 자료
- {rule:java:S4248} - Regex patterns should not be created needlessly
If you like SONARKUBE, don’t forget to give me a star.