可能重复:
Regular Expression to find a string included between two characters, while EXCLUDING the delimiters
我正在使用一个名为Interpreter.eval()的外部库“beanshell”方法,该方法允许使用字符串进行数学运算并返回解决方案。
它工作正常,但如果我想提高到第二个权力或从中得到一个平方根,我必须修改原来的字符串,如
字符串st =“x = 2 + 4 * a *(b + c)^ 2”
我需要在括号之间加上字符,将“(b + c)^ 2”替换为“(b + c)*(b + c)”或“Math.pow((b + c),2)”
我该怎么做? 提前谢谢!
---- ----编辑
最后我找到了解决方案。
Interpreter interpreter = new Interpreter();
String st = "x = 2+4*1*(2*(1+1)^2)^2 + (4+5)^2";
int index = -2;
char prev;
char post;
int openPar = -1;
if (st.contains("^")) {
index = st.indexOf("^");
while (index != -1) {
prev = st.charAt(index - 1);
post = st.charAt(index + 1);
if (prev == ')') {
int match = 0;
int i = index - 2;
char check = '0';
boolean contiunar = true;
while (contiunar) {
check = st.charAt(i);
if (check == ')')
match++;
if (check == '(') {
if (match == 0) {
openPar = i;
contiunar = false;
} else
match = match - 1;
}
i = i - 1;
}
String rep = st.substring(openPar + 1, index - 1);
String resultado = "";
try {
interpreter.eval("r= Math.pow(" + rep + "," + post
+ ")");
resultado = interpreter.get("r").toString();
} catch (EvalError e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
st = st.replace("(" + rep + ")^" + post, resultado);
} else {
st = st.replace(prev + "^" + post, prev + "*" + prev);
}
index = st.indexOf("^");
}
}
用此我修改了原始字符串 x = 2 + 4 * 1 *(2 *(1 + 1)^ 2)^ 2 +(4 + 5)^ 2 (例如)
到 x = 2 + 4 * 1 * 64 + 81
这是“(2+(3 + 4)+5)^ 2”--->的情况。返回“2+(3 + 4)+5”而不是“3 + 4)+5”。
现在替换正确表达 Math.pow(“结果”,“2”)“并逐步计算 (1 + 1)^ 2 = 4 (2 * 4)^ 2 = 64
(4 + 5)^ 2 = 81
最后我现在可以使用Interpreter.eval()
来计算retun非常感谢您的答案!
答案 0 :(得分:1)
尝试使用以下代码执行任务
String originalString ="x = 2+4*a*(b+c)^2";
String stringToInsert = "Math.pow((b+c),2)";
int startIndex = originalString.indexOf("(");
int endIndex = originalString.indexOf(")");
String firstPortion = originalString.substring(0,startIndex);
String lastPortion = originalString.substring(endIndex+1);
String finalString = firstPortion + stringToInsert + lastPortion;
System.out.println("finalString : "+finalString);
答案 1 :(得分:0)
您需要解析字符串。你可以编写一个完整的解析器,逐个字符地完成它。
否则,如果您有一个特定的流程图(使用运算符),请使用String.split(\“*(...)功能,您可以根据您的分隔符创建令牌。< / p>
希望这有帮助。
答案 2 :(得分:0)
当然你需要解析String。您可以将其转换为中间状态(可以在很快之后执行)。您可以看到以下链接,也许它可以帮助您http://en.wikipedia.org/wiki/Reverse_Polish_notation