【java解惑】java字符串替換方法使用


    如下代碼:

public class Example020 {

	public static void main(String[] args) {
		String separator = File.separator;
		String clazzName = Example020.class.getName();
		String rs1 = clazzName.replace(".", separator); // 方法1
		String rs2 = clazzName.replaceAll("\\.", "\\\\");// 方法2
		String rs3 = clazzName.replaceAll(Pattern.quote("."),
				Matcher.quoteReplacement(separator));// 方法3
		System.out.println("class name =" + clazzName);
		System.out.println("rs1=" + rs1);
		System.out.println("rs2=" + rs2);
		System.out.println("rs3=" + rs3);

	}
}

   

    分析說明:

    上述代碼是java字符串替換的三種方法。Java從1.5版本後提供了兩種字符串替換方法:replace和replaceAll。這兩個方法的功能相同,都能夠替換字符串所有需要替換的字符(雖然命名很具有迷惑性)。不同的是,replace方法傳入的參數是要被替換的字符和替換後的字符;replaceAll傳入的是要被替換的字符和替換後字符的正則表示。

  • 方法1中,傳入要被替換的"."和替換後的文件分隔符(不同系統不同);

  • 方法2中,由於"."在正則表達式中表示任何字符,如果直接傳入".",則被操作字符串的所有內容都會被替換,所以這裏需要加入轉義,也就是"\\."。第一個\表示轉義,而\本身又是特殊字符需要被轉義,所以需要再次轉義,所以是兩個\。替換後字符傳入的是"\\\\",\本身是windows文件路徑分隔符,但是傳入時需要轉義,保證傳入的是路徑分隔符而不是轉義符,所以傳入的字符就需要2個\,加上字符串表示(表明傳入的不是轉義字符)需要2個\,共需要使用4個\來表達一個文件分隔符。如果這裏傳入的是兩個\,在windows執行將會出現錯誤,而且這個錯誤的提示並不友好,導致很多時候完全無法定位錯誤緣由。值得注意的是,在linux下,這裏就不需要這麼麻煩,可以直接傳入文件分隔符/即可。

//使用replaceAll,第二個參數傳入"\\"的不友好錯誤提示
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
	at java.lang.String.charAt(String.java:658)
	at java.util.regex.Matcher.appendReplacement(Matcher.java:762)
	at java.util.regex.Matcher.replaceAll(Matcher.java:906)
	at java.lang.String.replaceAll(String.java:2162)
	at cn.itape.java.disabuse.Example020.main(Example020.java:13)
  • 方法3中,從1.5以後,java提供了兩個的方法,將字符串直接轉化正則表達式形式,直接使用即可,避免了方法2中需要自己加入轉義,減少錯誤發生的可能性。


(注:本【java解惑】系列,均是博主閱讀《java解惑》原書後,將原書上的講解和例子部分改編,然後寫成博文進行發佈的。所有例子均親自測試通過,並共享在github上。通過這些例子,激勵自己,惠及他人。同時,本系列所有博文會同步發佈在博主個人微信公衆號(搜索“愛題猿”或者“ape_it”),方便大家閱讀。如果文中有任何侵犯原作者權利的內容,請及時告知博主,以便及時刪除;如果讀者對文中的內容有異議或者問題,歡迎通過博客留言或者微信公衆號留言等方式共同探討。)

源代碼地址:https://github.com/rocwinger/java-disabuse


本文出自 “winger” 博客,謝絕轉載!

發佈了48 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章