[英]Why does String.replaceAll() need so many escapes for " character?
如果我有字符串a"b"c"
,但是我想得到a\\"b\\"c\\"
,我自然會寫
String t = "a\"b\"c\"";
t = t.replaceAll("\"", "\\\"");
但是,結果是相同的字符串a"b"c"
正確的方法是
t.replaceAll("\"", "\\\\\"");
為什么?
replaceAll
對模式和替換都使用正則表達式-兩者都需要轉義反斜杠。 因此,您想要第二個參數的正則表達式替換模式是:
\\"
現在,由於Java字符串文字中的 \\
和"
也都需要轉義,這意味着這些字符中的每個字符都需要一個額外的反斜杠。添加引號,您將獲得:
"\\\\\""
這就是您的資料來源。
如果只使用不使用正則表達式的String.replace
, 則更為簡單。 這樣,您僅嘗試提供此字符串(而不是字符串文字)作為第二個參數:
\"
轉義並轉換為字符串文字后,將變為:
"\\\""
仍然不是很好,但是至少更好。
一種替代方法是使用replaceAll
但使用Matcher.quoteReplacement
:
t = t.replaceAll("\"", Matcher.quoteReplacement("\\\""));
我個人只是使用replace()
。 畢竟,您不希望使用正則表達式替換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.