2017-12-15 10 views
0

하나의 특정하게 IntelliJ IDEA 검사를 구성 컴파일 있으며, java.util.regex.Pattern에 의해 대체 될 수 ') (대체'제안IntelliJ에 내가 코드가 같이있을 때 트리거됩니다

'replace()'는 컴파일 된 java.util.regex.Pattern 구조로 대체 될 수 있습니다.

그런 다음 코드를 리팩토링하여 나를위한 코드를 제공하므로 상수 리터럴 패턴이 사용됩니다.

이 검사는 주로 내가 실제로 정규식을 만드는 경우에 사용하도록 설정되어 있습니다. IntelliJ의 제안에 따라 성능을 향상시킬 수도 있습니다. 그러나 String.replace()의 경우 인수는 정규식이 아닙니다. 이 경우 IntelliJ의 제안에 따라 성능이 전혀 향상되지 않으며 가독성이 손상 될 수 있습니다.

String.replace()의 경우 사용을 중지 할 수 있지만 String.replaceAll()String.replaceFirst()의 경우 계속 사용 가능합니까? 나는 그런 선택을 보지 못했습니다.

+2

'String.replace (String, String)'의 구현을 보면, 왜 명시 적으로'Pattern'을 사용하여 추천하는지 알 수 있습니다;) –

+0

@OliverCharlesworth 저를 때려 눕히세요. 'Return Pattern.compile (target.toString(), Pattern.LITERAL) .matcher (...' – jensgram

답변

3

구현 은 Pattern.compile(...).matcher(...).replaceAll(...)에 단순히 위임합니다. 그래서 나는 사용자 코드에서 명시적인 Pattern을 사용하는 것이 performant (실제로 많은 경우에 더 많은 performant를 끝낼 가능성이 높습니다) 상황을 상상할 수 없습니다. 가독성은 물론 다른 질문입니다!

IntelliJ 검사를 구성 할 수 있는지 확신 할 수 없지만 개별 진술, 메서드 또는 클래스는 suppress it 수 있습니다.


1. Oracle의 JDK8 이상.

+0

루프에서'replace'를 사용하면 루프 외부에서'Pattern.compile (..) '을 움직일 수 있습니다. more performant. – marstran

+0

@marstran - 물론 그렇습니다.하지만 저는 패턴을 사용하여 코드 * less * performant를 만들 수 있다고 생각하지 않습니다. 필자는 대답을 수정하여 성능이 더 좋을 수도 있다고 지적했습니다. 그러나 많은 시나리오에서 코드. –