我想更換一個子串中出現的所有帶有值較大的字符串替換我#(看的例子輸入/輸出)與陣列的價值,但我不知道怎麼樣用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
正則表達式是在這裏:
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));
}
假定我給出的總是有效的。我的代碼適用於某些情況,但大多數情況下會失敗。任何幫助?謝謝!
編輯: 我不知道如何告訴它添加最後一部分(例如:+5在i0 + 5)。
I0 - 工程
I1^2 - 不工作
(I1 + 2)+5 - 不工作
2 * 5 + I1 - 工程
I1 + i2- I3 - 不工作
1 + 2 - 工程
1 + I2 - 工程
我想修改的正則表達式 「我{1}(\ d +)(。*)」
if(lastMatch()){//如果最後匹配成立,則爲真
s + = m.group(2)//將最後一組(即「+5」 0 + 5" )
}
但我不知道該正確的語法。
看起來不錯......什麼情況下它不工作? – aishwarya 2011-12-19 12:38:18
看到我上面的編輯,謝謝! – cnandreu 2011-12-19 12:45:49