2015-05-13 2 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); 
} 

Однако, когда я запускаю это, я получаю ошибку, что «Unclosed группа возле индекса 3» «3 (4» который я отлажена, чтобы найти, что линия string = string.replaceFirst(numbers[i], replace); вызывает проблему. Либо мне нужно что-то сделать, либо я просто не понимаю ошибку, так как не понимаю, что я делаю неправильно, так как я хочу заменить первый экземпляр 3 (4 в пределах строка 3 (4) с 3 * (4. Я не хочу закрывать выражение как-то вроде 3 (4-x) приведет к ошибке 3 * (4) -x).

Спасибо за ваше время и имеют хороший день:. 3

ответ

0

replaceAll (String регулярное выражение, замена String) - так аргумент "3 (4" трактуется как регулярное выражение, чтобы использовать так как вам нужно его процитировать: Pattern.quote(numbers[i]).

+0

Спасибо, я все еще новичок в библиотеке регулярных выражений, поэтому пропустить это не удивительно, хотя я думал, что использую 'replaceFirst (oldChar, newChar) 'для него или это не используется из-за переменных, которые я использовал? –

+0

Если ваше выражение не содержат специальных символов, это не имеет значения, цитируете ли вы это или нет. – agad