无与伦比的结束')'在replaceFirst

时间:2015-12-03 10:40:34

标签: java regex

我有这个代码删除第一个关闭')'来自输入字符串:

 if (campo.indexOf(")") >= 0){
        campo = campo.replaceFirst(")", "");
    }

在运行时,我收到此错误

  

无与伦比的结束')'

替换有什么问题?我查了一下')'甚至在尝试更换之前。

2 个答案:

答案 0 :(得分:4)

以这种方式尝试:

if (campo.indexOf(")") >= 0){
    campo = campo.replaceFirst("\\)", "");
}

)是regex中的保留字符 - 而replaceFirst将Regex作为第一个参数。

查看Pattern in JavaDoc以查看所有特殊字符

并且 - 正如评论中指出的那样 - 不需要检查。你可以简单地做

campo = campo.replaceFirst("\\)", "");

如果首先没有) - 则不会发生替换。

答案 1 :(得分:3)

您应该粘贴完整的堆栈跟踪...

无论如何,问题在于这一行:

campo = campo.replaceFirst(")", "");

.replaceFirst()的第一个参数是一个字符串文字,它被解释为一个正则表达式,而关闭的paren在正则表达式中是特殊的。

你需要逃脱它:

campo = campo.replaceFirst("\\)", "");