为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

阿晨1998 2022-07-14 17:33:47
为什么此代码02输出java-8但o2在java-9或以上?"o2".replaceAll("([oO])([^[0-9-]])", "0$2")
查看完整描述

1 回答

?
森栏

TA贡献1810条经验 获得超5个赞

很可能是由于JDK-6609854JDK-8189343报告了负嵌套字符类处理(在您的示例中[^[0-9-]])。此行为已在 9 和 10 中修复,但未将修复向后移植到 8。Java 8 的错误解释为:

在 Java 中,否定不适用于出现在嵌套中的任何内容[brackets]

如您所料,因此[^c]与“c”不匹配。

[^[c]]匹配“c”。不是我所期望的。

[[^c]]不匹配“c”

范围或属性表达式也是如此 - 如果它们在括号内,则输出级别的否定不会影响它们。

[^a-z][^[a-z]]


查看完整回答
反对 回复 2022-07-14
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号