坦白地说,你可以使用mXparser以及令牌发挥。
import org.mariuszgromada.math.mxparser.*;
...
...
Expression e = new Expression("√3 + 2");
mXparser.consolePrintTokens(e.getCopyOfInitialTokens());
结果:
[mXparser-v.4.0.0] --------------------
[mXparser-v.4.0.0] | Expression tokens: |
[mXparser-v.4.0.0] ---------------------------------------------------------------------------------------------------------------
[mXparser-v.4.0.0] | TokenIdx | Token | KeyW | TokenId | TokenTypeId | TokenLevel | TokenValue | LooksLike |
[mXparser-v.4.0.0] ---------------------------------------------------------------------------------------------------------------
[mXparser-v.4.0.0] | 0 | √3 | | -1 | -1 | 0 | NaN | error |
[mXparser-v.4.0.0] | 1 | + | + | 1 | 1 | 0 | NaN | |
[mXparser-v.4.0.0] | 2 | 2 | _num_ | 1 | 0 | 0 | 2.0 | |
[mXparser-v.4.0.0] ---------------------------------------------------------------------------------------------------------------
因此,让我们用代币玩
String exprStr = "√3 + 2";
Expression e = new Expression(exprStr);
ArrayList<Token> tokens = e.getCopyOfInitialTokens();
String newExprStr = "";
for (Token t : tokens) {
String toAdd = t.tokenStr;
if (t.tokenStr.charAt(0) == '√')
toAdd = "sqrt(" + t.tokenStr.substring(1) + ")";
newExprStr = newExprStr + toAdd;
}
mXparser.consolePrintln(newExprStr);
结果:
[mXparser-v.4.0.0] sqrt(3)+2
请按照mXparser tutorial,mXparser math collection和mXparser API定义。
此致敬礼:-)
“我明白,我可以使用的replaceAll函数来替换“ √'with'sqrt('...')请显示你迄今为止做了什么。 – 2017-04-11 06:07:31
我试图使用正则表达式:expression = expression.replaceAll(“\\√+ \\ d”,“($ 1)” ); 但是,这并没有工作,我试图通过改变正则表达式中的括号和字符位置,但无法得到它的几个排列。 –
请做一个MCVE http://stackoverflow.com/help/mcve – Yunnosch