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()
的结果重新分配回字符串。字符串是不可变的,不会进行就地替换。