关于转义序列
声明如下:
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?
参考文献
另见
回到问题
您的问题定义非常模糊,但以下 sn-p 可以正常工作:
System.out.println("How are you? Really??? Awesome!".replace("?", "\\?"));
上面的 sn-p 将 ? 替换为 \?,因此打印:
How are you\? Really\?\?\? Awesome!
如果您想用另一个char 替换char,那么还有一个重载:
System.out.println("How are you? Really??? Awesome!".replace('?', '\\'));
上面的 sn-p 将? 替换为\,从而打印:
How are you\ Really\\\ Awesome!
StringAPI 链接
关于正则表达式如何使事情复杂化
如果您使用replaceAll 或任何其他基于正则表达式的方法,那么事情会变得有些复杂。如果您了解一些基本规则,则可以大大简化。
- Java 中的正则表达式模式以
String 值给出
- 元字符(例如
? 和.)具有特殊含义,可能需要在前面加上反斜杠进行转义,以便逐字匹配
- 反斜杠也是替换
String值的特殊字符
上述因素可能导致 Java 源代码中的模式和替换字符串中需要大量反斜杠。
看起来你不需要正则表达式来解决这个问题,但这里有一个简单的例子来展示它可以做什么:
System.out.println(
"Who you gonna call? GHOSTBUSTERS!!!"
.replaceAll("[?!]+", "<$0>")
);
以上打印:
Who you gonna call<?> GHOSTBUSTERS<!!!>
模式[?!]+ 匹配字符类[...] 定义(在本例中包含? 和!)中的任何字符的一个或多个(+)。替换字符串<$0> 实质上将整个匹配项$0 放在尖括号内。
相关问题
正则表达式引用