記錄一個在工作中遇到的replace和replaceall的問題:java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 1


接手了一個項目的維護,測試的第一天測試反饋報錯,發我報錯信息后,根據堆棧信息找到報錯位置的代碼如下:

param.replaceAll("\\" + text, "<span style='color:red;'>"+text+"</span>")+"</span>");

目的是想將某些字符串用紅色進行展示,即將字符串替換成html。

報錯的原因是replaceAll(String regex, String replacement)第一個參數為正則表達式,在解析正則表達式的時候上面的"\\"+text不滿足解析條件比如\M 不是正則表達式,所以會報錯。此處用replace即可。
根本原因是沒有分清楚replace和replaceAll的區別,誤以為replaceAll是替換字符串中滿足條件的所有字符串。
實際上:
replace和replaceAll的共同點:都是全部替換,即把源字符串中的某一字符或字符串全部換成指定的字符或字符串。

不同點是:replaceAll支持正則表達式,因此會對參數進行解析,如replaceAll("\\d", "XX"),會將數字替換成XX。而replace則不會,replace("\\d","XX")就是替換"\\d"的字符串,而不會解析為正則。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM