在Java

时间:2017-01-04 13:00:48

标签: java arrays string parsing polynomials

我想处理这个多项式

String str =“2 * x ^ 2 + x + 2 * x ^ 2 + 8 - x ^ 3”;

我用加号和减号运算符拆分了字符串并获得了2 * x ^ 2。我发现很难解决这个问题。

我知道首先我需要计算x的值,让我们说x = 2,只是不知道如何将字符串解析为整数,因为还要解析字符串的其他部分。

我是否也需要分解“2 * x ^ 2”?

如何在字符串中找到*。我知道我可以使用str.contains(“*”), 对于这个特殊操作,我知道在2 * x ^ 2之后会出现什么,但是如果用户输入了那个棘手的多项式。

输出是迄今为止 操作2 * x ^ 2 + x + 2 * x ^ 2 + 8 - x ^ 3
Plus Splits
 0 2 * x ^ 2
 1 x
 2 2 * x ^ 2
 3 8 - x ^ 3
减去分数
 0 2 * x ^ 2 + x + 2 * x ^ 2 + 8
 1 x ^ 3

2 个答案:

答案 0 :(得分:2)

尝试使用此功能:http://projects.congrace.de/exp4j/

Expression e = new ExpressionBuilder("3 * sin(y) - 2 / (x - 2)")
        .variables("x", "y")
        .build()
        .setVariable("x", 2.3)
        .setVariable("y", 3.14);
double result = e.evaluate();

答案 1 :(得分:0)

一般来说,此操作称为“解析表达式”,并涵盖在许多书籍,文章和问题中,如How to parse a mathematical expression given as a string and return a number?

在这种特殊情况下,看起来格式非常有限,您可以手动拆分字符串并构建相应的数据结构:

  1. 首先用加号和减号分开,类似于你已经做过的事情(How to split a string, but also keep the delimiters?
  2. 在结果组中按*分割。
  3. 如果得到3组(数字,*,功率) - 最后由^分割。
  4. 如果您无法使用正则表达式来分割字符串 - 请使用indexOf查找特定字符(例如问题中的* - s.indexOf('*'))并使用substring切掉部分字符串。

    作为为该表达式构建AST的一部分,您还需要How to convert a String to an int in Java?