Development Tip

String.replaceAll ()이 Java 8에서 Java 9와 다르게 작동하는 이유는 무엇입니까?

yourdevel 2020. 11. 28. 12:35
반응형

String.replaceAll ()이 Java 8에서 Java 9와 다르게 작동하는 이유는 무엇입니까?


이유는 무엇입니까이 코드 출력 02에서 o2에서 이상?

"o2".replaceAll("([oO])([^[0-9-]])", "0$2")

대부분의 경우 JDK-6609854JDK-8189343 으로 인해 네거티브 중첩 문자 클래스 처리를보고했습니다 (예 :)[^[0-9-]] . 이 동작은 9와 10에서 수정되었지만 수정은 8로 백 포트되지 않았습니다. Java 8의 버그는 다음과 같이 설명됩니다.

Java에서 부정은 중첩 된 항목에 적용 되지 않습니다.[brackets]

따라서 [^c]예상 한대로 "c"와 일치하지 않습니다.

[^[c]]"c"와 일치합니다. 내가 기대하는 것이 아닙니다.

[[^c]] "c"와 일치하지 않음

범위 또는 속성 식의 경우에도 마찬가지입니다. 대괄호 안에있는 경우 out 수준의 부정은 영향을주지 않습니다.

[^a-z] 반대이다 [^[a-z]]

참고 URL : https://stackoverflow.com/questions/54946363/why-does-string-replaceall-work-differently-in-java-8-from-java-9

반응형