2015-05-13 68 views
0

因此,我正在尝试通过在评估字符串之前先读取一个字符串来制作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); 
} 

然而,当我运行它,我得到的错误“未闭合组附近指数3” “3(4”这是我调试,以发现这一行string = string.replaceFirst(numbers[i], replace);是造成这个问题的原因之一,或者我需要做别的事情,或者我只是不明白错误,因为我不明白我做错了什么,因为我的愿望是取代第一个例子3(4字符串3(4)3 *(4。我不想关闭像3( 4-x)将导致错误3 *(4)-x)

谢谢您的时间,有一个美好的一天:3

回答

0

的replaceAll(字符串正则表达式,字符串替换) - 这样的说法“3(4”被视为正则表达式中使用因为它是你需要引用它:Pattern.quote(numbers[i])

+0

谢谢!我还是新来的正则表达式库,所以错过这并不意外,即使我认为我正在使用'replaceFirst(oldChar,newChar) '为了它,还是没有使用,因为我使用的变量? –

+0

如果你的表达确实不包含特殊字符,如果您引用或不引用,则无关紧要。 – agad

相关问题