[英]replace `\\r` with `\r` in string
我需要將\\\\r
所有出現轉換為字符串中的\\r
。
我的嘗試如下:
String test = "\\r New Value";
System.out.println(test);
test = test.replaceAll("\\r", "\r");
System.out.println("output: " + test);
輸出:
\r New Value
output: \r New Value
使用replaceAll
您將必須使用.replaceAll("\\\\\\\\r", "\\r");
因為
\\
,您需要對其進行轉義,因此您需要使用\\\\
傳遞給正則表達式引擎 \\
創建字符串文字,則需要將其寫為"\\\\"
。 更清楚的方法是使用replace("\\\\r", "\\r");
它將自動轉義所有正則表達式元字符。
\\
用於在Java中進行轉義-因此,每次您真正想在字符串中匹配反斜杠時,都需要編寫兩次。
此外,這也是大多數人似乎所缺少的replaceAll()
一個正則表達式,而您只想基於簡單的字符串替換進行替換- 因此請使用replace()
代替。 (當然,您也可以通過轉義正則表達式在技術上在簡單的字符串上使用replaceAll()
,但是隨后您不得不在參數上使用Pattern.quote()
,或者只為了匹配一個反斜杠而編寫4個反斜杠,因為它是正則表達式和Java中都是特殊字符!)
一個常見的誤解是replace()
只是替換了第一個實例, 但事實並非如此 :
用指定的文字替換序列替換此字符串中與文字目標序列匹配的每個子字符串。
...唯一的區別是它適用於文字,而不適用於正則表達式。
在這種情況下,您會無意中逃避r
,這會產生回車符! 因此,基於以上內容,為避免這種情況,您實際上要這樣做:
String test = "\\\\r New Value";
和:
test = test.replace("\\\\r", "\\r");
您將必須轉義每個\\
符號。
嘗試:
test = test.replaceAll("\\\\r", "\\r");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.