[英]How to replace a special character with single slash
我對Java中的字符串有疑問。 比方說,我有一個像這樣的字符串:
String str = "The . startup trace ?state is info?";
由於字符串包含特殊字符,如"?"
我需要用"\\?"
替換字符串 根據我的要求。 如何用"\\"
替換特殊字符? 我嘗試了以下方式。
str.replace("?","\?");
但它給出了編譯錯誤。 然后我嘗試了以下內容:
str.replace("?","\\?");
當我這樣做時,它用"\\\\"
替換特殊字符。 但是當我打印字符串時,它會打印出單斜杠。 我認為它只采用單斜杠,但是當我調試時,我發現該變量采用了"\\\\"
。
任何人都可以建議如何用單斜杠( "\\"
)替換特殊字符?
聲明如下:
String s = "\\";
定義包含單個反斜杠的字符串。 也就是說, s.length() == 1
。
這是因為\\
是String
和char
文字的Java轉義字符。 以下是其他一些例子:
"\\n"
是一個長度為1的String
,包含換行符 "\\t"
是一個長度為1的String
,包含制表符 "\\""
是一個長度為1的String
,包含雙引號字符 "\\/"
包含無效的轉義序列,因此不是有效的String
文字
當然,您可以將轉義序列與String
文字中的普通未轉義字符組合在一起:
System.out.println("\"Hey\\\nHow\tare you?");
以上打印件(標簽間距可能不同):
"Hey\
How are you?
您的問題定義非常模糊,但以下代碼段可以正常工作:
System.out.println("How are you? Really??? Awesome!".replace("?", "\\?"));
上面的代碼片段取代了?
用\\?
,從而打印:
How are you\? Really\?\?\? Awesome!
相反,如果你想更換一個char
與其他char
,那么就也出過載:
System.out.println("How are you? Really??? Awesome!".replace('?', '\\'));
上面的代碼片段取代了?
用\\
,從而打印:
How are you\ Really\\\ Awesome!
String
API鏈接 replace(CharSequence target, CharSequence replacement)
target
序列匹配的此字符串的每個子字符串替換為指定的文字replacement
序列。 replace(char oldChar, char newChar)
newChar
替換此字符串中所有出現的oldChar
。 如果您正在使用replaceAll
或任何其他基於正則表達式的方法,那么事情會變得更加復雜。 如果您了解一些基本規則,可以大大簡化。
String
值的形式給出 ?
和.
)具有特殊含義,可能需要通過前面的反斜杠進行轉義才能完全匹配 String
值中的特殊字符 上述因素可能導致需要在Java源代碼中的模式和替換字符串中存在大量反斜杠。
看起來你不需要這個問題的正則表達式,但這里有一個簡單的例子來說明它可以做什么:
System.out.println(
"Who you gonna call? GHOSTBUSTERS!!!"
.replaceAll("[?!]+", "<$0>")
);
以上打印:
Who you gonna call<?> GHOSTBUSTERS<!!!>
模式[?!]+
匹配字符類[...]
定義中的任何字符的一個或多個( +
)(在這種情況下包含?
和!
)。 替換字符串<$0>
基本上將整個匹配$0
放在有角度的括號內。
split(".")
和split("|")
這樣的常見錯誤 如果你想更換?
用\\?
,有兩種可能: replace
和replaceAll
(對於正則表達式):
str.replace("?", "\\?")
str.replaceAll("\\?","\\\\?");
結果是"The . startup trace \\?state is info\\?"
如果要更換?
用\\
,只需刪除?
第二個參數的字符。
String str="\\";
str=str.replace(str,"\\\\");
System.out.println("New String="+str);
輸出: - 新字符串= \\
在java "\\\\"
中將其視為"\\"
。 因此,上面的代碼將"\\"
單斜杠替換為"\\\\"
。
但是當我打印字符串時,它會打印出單斜杠。
好。 這正是你想要的,不是嗎?
有兩個簡單的規則:
必須將String文本中的反斜杠指定為兩個以滿足編譯器,即“\\”。 否則它被視為特殊角色逃脫。
必須將常規表達式中的反斜杠指定為兩個以滿足正則表達式,否則將其視為正則表達式轉義。 因為(1)這意味着你必須寫2x2 = 4個:“\\\\\\\\”(因為論壇軟件我實際上必須寫8!)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.