2017-04-11 14 views
-1

如果用户类型:√3+ 2如何仅在数学表达式中的squareroot之后的操作数周围插入括号?

我想将它更改为:开方(3)+ 2

我在Android Studio中工作,因此,语言是Java。这是我正在使用的MXParser库所必需的。我知道我可以使用replaceAll函数来替换'sqrtrt'('但将')'替换为操作数之后以及以下操作符之前我想知道的。我知道我必须使用正则表达式,但不知道如何使用它来获得这个期望的结果。

您的帮助表示赞赏:)

此外,可以请你也指出,从那里我可以阅读和学习如何在今后的使用正则表达式这种类似的要求(如有发生)一个很好的资源?

+0

“我明白,我可以使用的replaceAll函数来替换“ √'with'sqrt('...')请显示你迄今为止做了什么。 – 2017-04-11 06:07:31

+0

我试图使用正则表达式:expression = expression.replaceAll(“\\√+ \\ d”,“($ 1)” ); 但是,这并没有工作,我试图通过改变正则表达式中的括号和字符位置,但无法得到它的几个排列。 –

+0

请做一个MCVE http://stackoverflow.com/help/mcve – Yunnosch

回答

0

试试这个代码:

 String str = "√2 + 3"; 
     str = str + " "; 
     String firstDelim = "√"; 
     int p1 = str.indexOf(firstDelim); 
     Log.i("p1 ", "p1 " + p1); 

     if (p1 >= 0) { 

      int k = p1 + firstDelim.length(); 

      for (int i = p1 + 1; i < str.length(); i++) { 
       String a = str.substring(i, i + 1); 
       if (!isInt(a)) { 
       k = i; 
       break; 
       } 
      } 

     String temp = str; 
     String res = temp.substring(p1 + firstDelim.length(), k); 
     str = str.replace(res, res + ")"); 
     str = str.replace("√", "sqrt("); 
     System.out.println(str); 
     } 

和isInt仅仅是一个功能:

static boolean isInt(String s) 
    { 
    try 
     { int i = Integer.parseInt(s); return true; } 

    catch(NumberFormatException er) 
     { return false; } 
    } 
0

坦白地说,你可以使用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 tutorialmXparser math collectionmXparser API定义。

此致敬礼:-)

0

我终于能够用正则表达式解决这个问题。

随着下面的代码行,可以很容易地与数量为括号内替换“√”“的sqrt()”:

expression = expression.replaceAll("√(\\d+)", "sqrt($1)"); 
相关问题