Я хочу заменить i # (смотрите пример ввода / вывода) значением массива, но я не уверен, как это сделать с Java + Regex.
Предположим, у вас есть массив с: [3,2,1,0]
Пример ввода:
i0
i1 ^ 2
(I1 + 2) + 5
2 * 5 + i1
i1 + i2-i3
1 + 2
Пример вывода:
3 [почему? входное значение равно i0, а индекс 0 = 3 в массиве]
2 ^ 2
(2 + 2) + 5
2 * 5 + 2
2 + 1-0
1 + 2
Regex здесь:
http://rubular.com/r/KXbCQnbs8K
REGEX = i {1} (\ d +)
Код:
private String replace(String input){
StringBuffer s = new StringBuffer();
Pattern regex = Pattern.compile(REGEX);
Matcher m = regex.matcher(input);
if( !m.find(0) ){
return input;
}else{
m.reset();
}
while (m.find() ){
m.appendReplacement(s, getRealValue(m.group(1)) );
}
return s.toString();
}
private String getRealValue(String val){
int value = Integer.parseInt(val);
return String.valueOf(array.get(value));
}
Предположим, что данные # всегда действительны Мой код работает в некоторых случаях, но в большинстве случаев не работает. Любая помощь? Спасибо!
EDIT:
Я не уверен, как сказать, чтобы добавить последнюю часть (например: +5 в i0 + 5).
i0 - работает
i1 ^ 2 - не работает
(i1 + 2) +5 - не работает
2 * 5 + i1 - работает
i1 + i2-i3 - не работает
1 + 2 - работает
1 + i2 - работает
Я хочу изменить регулярное выражение на "i {1} (\ d +) (. *)"
if (lastMatch ()) {// если последнее совпадение истинно
s + = m.group (2) // объединить последнюю группу (т. е. "+5" в "i0 + 5")
}
Но я не знаю правильный синтаксис для этого.