1. 程式人生 > 其它 >replace與replaceAll replace與replaceAll的區別

replace與replaceAll replace與replaceAll的區別

宣告

本文轉自: replace與replaceAll的區別

正文

這兩者有些人很容易搞混,因此我在這裡詳細講述下。

replace的引數是char和CharSequence,即可以支援字元的替換,也支援字串的替換(CharSequence即字串序列的意思,說白了也就是字串);

replaceAll的引數是regex,即基於規則表示式的替換,比如:可以通過replaceAll("\\d", "*")把一個字串所有的數字字元都換成星號;

相同點:都是全部替換,即把源字串中的某一字元或字串全部換成指定的字元或字串;

不同點:replaceAll支援正則表示式,因此會對引數進行解析(兩個引數均是),如replaceAll("\\d", "*"),而replace則不會,replace("\\d","*")就是替換"\\d"的字串,而不會解析為正則。

另外還有一個不同點:“\”在java中是一個轉義字元,所以需要用兩個代表一個。例如System.out.println( "\\" ) ;只打印出一個"\"。但是“\”也是正則表示式中的轉義字元,需要用兩個代表一個。所以:\\\\被java轉換成\\,\\又被正則表示式轉換成\,因此用replaceAll替換“\”為"\\",就要用replaceAll("\\\\","\\\\\\\\"),而replace則replace("\\","\\\\")。

如果只想替換第一次出現的,可以使用replaceFirst(),這個方法也是基於規則表示式的替換,但與replaceAll()不同的是,只替換第一次出現的字串。

 

示例

content.replaceAll("\\s*|\\t|\\r|\\n", "");

signature.replaceAll("\\\\n", "\\\n");