java中的转义*字符
我正在尝试对字符串执行以下操作java中的转义*字符,java,string,escaping,special-characters,Java,String,Escaping,Special Characters,我正在尝试对字符串执行以下操作 if (combatLog.contains("//*name//*")) { combatLog.replaceAll("//*name//*",glad.target.name); } 斜线是我试图逃避的*,因为没有斜线是行不通的。我还尝试了一个斜杠,并且对contains或replaceAll分别进行了斜杠。谢谢您正在使用正斜杠使用反斜杠:\来转义字符 [编辑] 正如slaks所说,您需要使用replace(),它接受字符串
if (combatLog.contains("//*name//*")) {
combatLog.replaceAll("//*name//*",glad.target.name);
}
斜线是我试图逃避的*,因为没有斜线是行不通的。我还尝试了一个斜杠,并且对contains或replaceAll分别进行了斜杠。谢谢您正在使用正斜杠使用反斜杠:
\
来转义字符
[编辑]
正如slaks所说,您需要使用
replace()
,它接受字符串作为输入,而不是正则表达式。您使用的是正向斜杠。反斜杠是转义字符。此外,除非字符串用于正则表达式或类似的东西,否则您不需要转义*
,或者/
,如果您正试图转义的话
如果combatLog是字符串,则其包含的方法仅检查字符序列。如果要在字符串中查找*name*
,只需调用combatLog.contains(“*name*”)
replaceAll()
(反直觉地)接受正则表达式,而不是字符串。要转义正则表达式的字符,需要双反斜杠(双反斜杠用于从字符串文本转义反斜杠)
但是,您不需要正则表达式。您只需调用
replace()
,而不需要任何转义。不要忘记字符串的不变性,并重新分配新创建的字符串。另外,如果if
块不包含更多代码,则根本不需要if
检查
您有3种选择:
if (combatLog.contains("*name*")) { // don't escape in contains()
combatLog = combatLog.replaceAll("\\*name\\*", replacement);// correct escape
}
// another regex based solution
if (combatLog.contains("*name*")) {
combatLog = combatLog.replaceAll("[*]name[*]", replacement);// character class
}
或者没有正则表达式
if (combatLog.contains("*name*")) {
combatLog = combatLog.replace("*name*", replacement);// literal string
}
使用
backslash
进行转义。不要转义contains()
中的星号。此外,您需要将replaceAll()
的结果重新分配回字符串。字符串是不可变的,不会进行就地替换。