1. 程式人生 > >java中replace 和replaceAll使用遇到的問題:

java中replace 和replaceAll使用遇到的問題:

問題:

	public static void main(String[] args) {
		String data = "2010.10.06";
		String data1 = data.replace(".", " ");
		String data2 = data.replaceAll(".", " ");
		
		System.out.println("data1:" + data1);
		System.out.println("data2:" + data2);
	}
       執行結果為:

data1:2010 10 06
        data2:   



        原因是: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()不同的是,只替換第一次出現的字串。