为什么 String.replaceAll() 在 Java 8 和 Java 9 中的工作方式

为什么此代码02输出java-8o2java-9或以上?

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


阿晨1998
浏览 118回答 1
1回答

森栏

很可能是由于JDK-6609854和JDK-8189343报告了负嵌套字符类处理(在您的示例中[^[0-9-]])。此行为已在 9 和 10 中修复,但未将修复向后移植到 8。Java 8 的错误解释为:在 Java 中,否定不适用于出现在嵌套中的任何内容[brackets]如您所料,因此[^c]与“c”不匹配。[^[c]]匹配“c”。不是我所期望的。[[^c]]不匹配“c”范围或属性表达式也是如此 - 如果它们在括号内,则输出级别的否定不会影响它们。[^a-z]与[^[a-z]]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java