为什么此代码02输出java-8但o2在java-9或以上?"o2".replaceAll("([oO])([^[0-9-]])", "0$2")
1 回答

森栏
TA贡献1810条经验 获得超5个赞
很可能是由于JDK-6609854和JDK-8189343报告了负嵌套字符类处理(在您的示例中[^[0-9-]]
)。此行为已在 9 和 10 中修复,但未将修复向后移植到 8。Java 8 的错误解释为:
在 Java 中,否定不适用于出现在嵌套中的任何内容
[brackets]
如您所料,因此
[^c]
与“c”不匹配。
[^[c]]
匹配“c”。不是我所期望的。
[[^c]]
不匹配“c”范围或属性表达式也是如此 - 如果它们在括号内,则输出级别的否定不会影响它们。
[^a-z]
与[^[a-z]]
添加回答
举报
0/150
提交
取消