簡體   English   中英

為什么String.replaceAll()的字符需要這么多的轉義?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM