簡體   English   中英

為什么String.replaceAll()在Java 8中與Java 9的工作方式不同?

[英]Why does String.replaceAll() work differently in Java 8 from 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級別的否定不會影響它們。

[^az][^[az]]相反

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM