為什么此代碼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 中,否定不適用于出現(xiàn)在嵌套中的任何內容
[brackets]
如您所料,因此
[^c]
與“c”不匹配。
[^[c]]
匹配“c”。不是我所期望的。
[[^c]]
不匹配“c”范圍或屬性表達式也是如此 - 如果它們在括號內,則輸出級別的否定不會影響它們。
[^a-z]
與[^[a-z]]
添加回答
舉報
0/150
提交
取消