所以我想在评估之前通过读取字符串来创建ScriptEngineManager
engine.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);
}
然而,当我运行这个时,我得到"在索引3附近的未关闭组"
" 3(4" 我调试后发现行string = string.replaceFirst(numbers[i], replace);
导致了问题。要么我需要做其他事情,要么我不理解错误,因为我不明白我做错了什么因为我希望用替换字符串 3(4)中的 3(4 )的第一个实例3 *(4 。我不想关闭表达式,因为 3(4-x)会导致错误 3 *(4)-x)< /强>
感谢您的时间和美好的一天:3
答案 0 :(得分:0)
replaceAll(String regex ,字符串替换) - 所以参数“3(4”被视为正则表达式。要将其用作你需要引用它:Pattern.quote(numbers[i])
。