簡體   English   中英

如何用單斜杠替換特殊字符

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

這是因為\\Stringchar文字的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鏈接


關於正則表達式如何使事情復雜化

如果您正在使用replaceAll或任何其他基於正則表達式的方法,那么事情會變得更加復雜。 如果您了解一些基本規則,可以大大簡化。

  • Java中的正則表達式模式以String值的形式給出
  • 元字符(例如?. )具有特殊含義,可能需要通過前面的反斜杠進行轉義才能完全匹配
  • 反斜杠也是替換String值中的特殊字符

上述因素可能導致需要在Java源代碼中的模式和替換字符串中存在大量反斜杠。

看起來你不需要這個問題的正則表達式,但這里有一個簡單的例子來說明它可以做什么:

    System.out.println(
        "Who you gonna call? GHOSTBUSTERS!!!"
            .replaceAll("[?!]+", "<$0>")
    );

以上打印:

Who you gonna call<?> GHOSTBUSTERS<!!!>

模式[?!]+匹配字符類[...]定義中的任何字符的一個或多個( + )(在這種情況下包含?! )。 替換字符串<$0>基本上將整個匹配$0放在有角度的括號內。

相關問題

正則表達式引用

如果你想更換? \\? ,有兩種可能: replacereplaceAll (對於正則表達式):

str.replace("?", "\\?")

str.replaceAll("\\?","\\\\?");

結果是"The . startup trace \\?state is info\\?"

如果要更換? \\ ,只需刪除? 第二個參數的字符。

        String str="\\";
        str=str.replace(str,"\\\\");
        System.out.println("New String="+str);

輸出: - 新字符串= \\

在java "\\\\"中將其視為"\\" 因此,上面的代碼將"\\"單斜杠替換為"\\\\"

但是當我打印字符串時,它會打印出單斜杠。

好。 這正是你想要的,不是嗎?

有兩個簡單的規則:

  1. 必須將String文本中的反斜杠指定為兩個以滿足編譯器,即“\\”。 否則它被視為特殊角色逃脫。

  2. 必須將常規表達式中的反斜杠指定為兩個以滿足正則表達式,否則將其視為正則表達式轉義。 因為(1)這意味着你必須寫2x2 = 4個:“\\\\\\\\”(因為論壇軟件我實際上必須寫8!)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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