替换表达式时带括号的未闭合组错误

Unclosed Group Error with Parentheses when Replacing an Expression

所以我试图通过在评估字符串之前读取字符串来制作 ScriptEngineManagerengine.eval() 的自定义变体。我想将表达式 3(4) 转换为 3*(4) 以便 engine.eval() 可以读取它。所以我尝试使用这种方法:

String string = 3(4);
String[] numbers = string.split("\)|\*|/|\+|-");
if (numbers[i].contains("(")) {
    val = numbers[i].split("\(");
    if (val[0].equals("")) {
        val[0] = "1";
    }
    String replace = val[0] + "*(" + val[1];
    string = string.replaceFirst(numbers[i], replace);
}

但是,当我 运行 这个时,我得到的错误是 "Unclosed group near index 3" "3(4" 我调试后发现 string = string.replaceFirst(numbers[i], replace); 行导致了问题。要么我需要做其他事情,要么我只是不明白这个错误,因为我不理解我做错了什么,因为我的愿望是用 [=22=22=]3(4) 替换字符串 3(4 的第一个实例=]3*(4。我不想关闭表达式,因为 3(4-x) 会导致 3 的错误*(4)-x).

感谢您的宝贵时间,祝您愉快:3

replaceAll(String regex, String replacement) - 所以参数 "3(4" 被视为正则表达式。要按原样使用它,您需要引用它:Pattern.quote(numbers[i]).