我对Java中的字符串有疑问。比方说,我有一个像这样的字符串:
String str = "The . startup trace ?state is info?";
由于字符串包含"?"
之类的特殊字符,因此我需要根据我的要求将字符串替换为"\?"
。如何用"\"
替换特殊字符?我尝试了以下方式。
str.replace("?","\?");
但它给出了编译错误。然后我尝试了以下内容:
str.replace("?","\\?");
当我这样做时,它会用"\\"
替换特殊字符。但是当我打印字符串时,它会打印出单斜杠。我认为它只采用单斜杠,但在调试时我发现该变量正在进行"\\"
。
有人可以建议如何用单斜杠("\"
)替换特殊字符吗?
答案 0 :(得分:5)
声明如下:
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)
oldChar
替换为newChar
而生成的。 如果您使用的是replaceAll
或任何其他基于正则表达式的方法,那么事情会变得更加复杂。如果您了解一些基本规则,可以大大简化。
String
值?
和.
)具有特殊含义,可能需要通过前面的反斜杠进行转义才能完全匹配String
值上述因素可能导致Java源代码中的模式和替换字符串需要大量反斜杠。
看起来你不需要这个问题的正则表达式,但是这里有一个简单的例子来说明它可以做什么:
System.out.println(
"Who you gonna call? GHOSTBUSTERS!!!"
.replaceAll("[?!]+", "<$0>")
);
以上版画:
Who you gonna call<?> GHOSTBUSTERS<!!!>
模式[?!]+
匹配字符类+
定义中的任何字符的一个或多个([...]
)(其中包含?
和{{1} } 在这种情况下)。替换字符串!
实际上将整个匹配<$0>
放在有角度的括号内。
$0
和split(".")
答案 1 :(得分:1)
如果您想将?
替换为\?
,则有两种可能:replace
和replaceAll
(对于正则表达式):
str.replace("?", "\\?")
str.replaceAll("\\?","\\\\?");
结果为"The . startup trace \?state is info\?"
如果要将?
替换为\
,只需从第二个参数中删除?
字符即可。
答案 2 :(得分:0)
但是当我打印字符串时,它会打印出来 用单斜杠。
好。这正是你想要的,不是吗?
有两个简单的规则:
必须将String文本中的反斜杠指定为两个以满足编译器,即“\”。否则它被视为特殊角色逃脱。
正常表达式中的反斜杠必须指定为2以满足正则表达式,否则将其视为正则表达式转义符。因为(1)这意味着你必须写2x2 = 4个:“\\\\”(因为论坛软件我实际上必须写8个!)。
答案 3 :(得分:0)
String str="\\";
str=str.replace(str,"\\\\");
System.out.println("New String="+str);
输出: - 新字符串= \
在java "\\"
中视为"\"
。因此,上面的代码将"\"
单斜杠替换为"\\"
。