如何用单斜杠替换特殊字符

时间:2010-07-21 18:54:26

标签: java

我对Java中的字符串有疑问。比方说,我有一个像这样的字符串:

String str = "The . startup trace ?state is info?";

由于字符串包含"?"之类的特殊字符,因此我需要根据我的要求将字符串替换为"\?"。如何用"\"替换特殊字符?我尝试了以下方式。

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

但它给出了编译错误。然后我尝试了以下内容:

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

当我这样做时,它会用"\\"替换特殊字符。但是当我打印字符串时,它会打印出单斜杠。我认为它只采用单斜杠,但在调试时我发现该变量正在进行"\\"

有人可以建议如何用单斜杠("\")替换特殊字符吗?

4 个答案:

答案 0 :(得分:5)

关于转义序列

声明如下:

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<!!!>

模式[?!]+匹配字符类+定义中的任何字符的一个或多个([...])(其中包含?和{{1} } 在这种情况下)。替换字符串!实际上将整个匹配<$0>放在有角度的括号内。

相关问题

正则表达式引用

答案 1 :(得分:1)

如果您想将?替换为\?,则有两种可能:replacereplaceAll(对于正则表达式):

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

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

结果为"The . startup trace \?state is info\?"

如果要将?替换为\,只需从第二个参数中删除?字符即可。

答案 2 :(得分:0)

  

但是当我打印字符串时,它会打印出来   用单斜杠。

好。这正是你想要的,不是吗?

有两个简单的规则:

  1. 必须将String文本中的反斜杠指定为两个以满足编译器,即“\”。否则它被视为特殊角色逃脱。

  2. 正常表达式中的反斜杠必须指定为2以满足正则表达式,否则将其视为正则表达式转义符。因为(1)这意味着你必须写2x2 = 4个:“\\\\”(因为论坛软件我实际上必须写8个!)。

答案 3 :(得分:0)

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

输出: - 新字符串= \

在java "\\"中视为"\"。因此,上面的代码将"\"单斜杠替换为"\\"