Java字符串指数[关闭]

Posted

技术标签:

【中文标题】Java字符串指数[关闭]【英文标题】:Java String exponents [closed] 【发布时间】:2020-06-11 20:46:03 【问题描述】:

我将如何计算String number = "3^6"? 有计算指数的数学选项,但我如何将字符串转换为 java 数学类可以解决的问题?

【问题讨论】:

它总是采用这种精确的形式,还是您希望处理任意复杂的方程?您是否尝试过编写可以分享以寻求帮助的代码? 使用 indexOf() 找到字符串中的指数符号,使用 substring() 取出它前后的部分,使用 Integer.parseInt() 将它们转换为数字,然后调用 Math.pow( )。 计算数学表达式的一般问题,例如见JEP:sourceforge.net/projects/jep 如果您打算花时间这样做,那么为什么不编写一个程序将代数表达式转换为后置 (RPN) 表示法,然后对其进行评估。 我使用了调车场算法,但这并不意味着它知道如何求解指数。所以是的,他们已经是 RPN。 【参考方案1】:

如果您想进行通用表达式评估,请查看此内容:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class Main 

  static ScriptEngineManager mgr = new ScriptEngineManager();
  static ScriptEngine engine = mgr.getEngineByName("mvel");

  public static void main(String[] args) throws ScriptException 
    System.out.println(eval("3^6"));
    System.out.println(eval("(1+2)^(2*3)"));
    System.out.println(eval("2^2^2"));
  

  private static Number eval(String expression) throws ScriptException 
    int idx = expression.indexOf('^');
    if (idx > 0) 
      String left = expression.substring(0, idx);
      String right = expression.substring(idx + 1);
      double base = eval(left).doubleValue();
      double exp = eval(right).doubleValue();
      return Math.pow(base, exp);
    

    return (Number) engine.eval(expression);
  


输出:

729.0
729.0
16.0

【讨论】:

【参考方案2】:
String s = "3^6";
String[] sArr = s.split("\\^");
double[] dArr = Double.valueOf(sArr[0]), Double.valueOf(sArr[1]);
System.out.println(Math.pow(dArr[0], dArr[1]));

这应该可以帮助您入门。打印:

729.0

当然,对于复杂的方程,您必须编写代码来相应地处理它。

如果你的方程有括号,你Stack 来检查开始和结束括号。如果等式类似于:3 ^ 6 ^ 2,则计算循环中的指数。

【讨论】:

以上是关于Java字符串指数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Java以指数表示法解析数字

unity 3d-大分数数字变成指数 C# [关闭]

删除字符串 Java 的已知部分 [关闭]

在Java中生成一个随机字符串[关闭]

如何使用java将字符串(1,234)转换为数字(1234)[关闭]

字符串到java中的jsonobject [关闭]