我正在尝试对字符串执行以下操作。
if (combatLog.contains("//*name//*")) {
combatLog.replaceAll("//*name//*",glad.target.name);
}
斜线是我试图逃避 *,因为没有它们它就无法工作。我也尝试了一个斜线,并分别在 contains 或 replaceAll 上使用斜线。谢谢
我正在尝试对字符串执行以下操作。
if (combatLog.contains("//*name//*")) {
combatLog.replaceAll("//*name//*",glad.target.name);
}
斜线是我试图逃避 *,因为没有它们它就无法工作。我也尝试了一个斜线,并分别在 contains 或 replaceAll 上使用斜线。谢谢
replaceAll()
(反直觉地)采用正则表达式,而不是字符串。
要转义正则表达式的字符,您需要一个双反斜杠(加倍以从字符串文字中转义反斜杠)。
但是,您不需要正则表达式。您应该简单地调用replace()
,这不需要任何转义。
您正在使用正斜杠。反斜杠是转义字符。此外,除非字符串用于正则表达式或类似的东西,否则您无需转义*
, 或/
if 那就是您要转义的内容。
如果战斗日志是一个字符串,它的 contains 方法只检查一个字符序列。*name*
如果你在字符串中寻找,你只需要 call combatLog.contains("*name*")
。
您正在使用正斜杠使用反斜杠:\
转义字符
[编辑] 也正如 slaks 所说,您需要使用replace()
which 接受字符串作为输入而不是正则表达式。
不要忘记字符串的不变性,并重新分配新创建的字符串。此外,如果您的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
}