我有下面的代碼的replaceAll不工作
String s = "A'BDG";
System.out.println(s.replaceAll("'", "\\'"));
所以輸出是同一個String,它不與\'
更換'
。但它與replace()
工作正常,所以最新的問題replaceAll()
?
我有下面的代碼的replaceAll不工作
String s = "A'BDG";
System.out.println(s.replaceAll("'", "\\'"));
所以輸出是同一個String,它不與\'
更換'
。但它與replace()
工作正常,所以最新的問題replaceAll()
?
只需使用String.replace(CharSequence target, CharSequence replacement)
如果你正在處理的文本字符串:
s.replace("'", "\\'")
它將用\'
替換字符串中所有'
的實例。
String.replaceAll(String regex, String replacement)
的和String.replaceFirst(String regex, String replacement)
功能與Pattern
(正則表達式)的工作原理。
儘管"'"
是模式沒有問題,替換字符串"\\'"
是您的問題的來源。由於替換字符串可以包含特殊的序列,例如$1
以引用捕獲組捕獲的文本,因此語法必須允許通過轉義\\$
指定明文$
。這種轉義將導致\'
在替換字符串語法中被解釋爲'
。
這就是爲什麼您需要將轉義字符"\\\\'"
翻倍以使替換字符串正常工作。一層轉義爲\\'
到replaceAll
/replaceFirst
函數,下一層使替換字符串被解釋爲\'
。
s.replaceAll("'", "\\\\'")
在這種情況下,Matcher.quoteReplacement(String s)
可以用來當你想用固定字符串替換引用替換字符串:
s.replaceAll("'", Matcher.quoteReplacement("\\'"))
使用
String s = "A'BDG";
System.out.println(s.replaceAll("\\'", "\\\\'"));
你必須\\
與replaceAll()
出逃避'
地說:
A\'BDG
搜索可以用'「「」',這裏的問題是替換字符串來完成。 – nhahtdh
@nhahtdh是的。更正確。 –
當您使用替換功能,它確定了逃逸符號不同,添加另一個\\並以正確的方式調用replaceAll方法。 如果你
s.replace("'", "\\'")
就會自動調用
s.replaceAll("\\'", "\\\\'")
但是,如果你調用函數的replaceAll直接它不`噸有任何線索,以確定特殊charactors像'由它自己的\。如果你進入替換函數,你會看到在replaceable函數中通過quoteReplacement方法將該附加的\添加到這個轉義字符中。
,所以如果你想使用全部替換功能,使用它柔韌額外逃生charactors像
s.replaceAll("\\'", "\\\\'")
歡呼
謝謝。明白了你的觀點。 – commit