接手了一個項目的維護,測試的第一天測試反饋報錯,發我報錯信息后,根據堆棧信息找到報錯位置的代碼如下:
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"的字符串,而不會解析為正則。