如何将数学方程分为系数和指数?

时间:2018-03-11 19:09:33

标签: java string math split

我在java中计算一些方程式。我想使用单链表。节点应该有两个整数数据:系数和指数。

这是一个例子: 等式= 18x ^ 75-4x ^ 56 + 18x ^ 37 + 18x ^ 19-18x ^ 9-12

链表= node1(18,75) - > node2(-4,56)......应该是这样的。

我要求分裂。

String equation = "18x^75-4x^56+18x^37+18x^19-18x^9-12";
String[] terms = equation.split("[0-9]+(?<=[-+*/()])|(?=[-+*/()])");
for (String term : terms) {
     System.out.println(term);
}

1 个答案:

答案 0 :(得分:1)

  • 您可以先使用+-分隔符拆分等式,以便获得每个单独术语的数组。请注意,如果术语为负数,您将希望保留该符号。
  • 然后您可以流式传输术语数组,对于每个术语,使用分隔符“x ^”进一步拆分。有了这个,你将获得两个分割项目 - x ^左边的一个是你的系数,右边是指数。
  • 将系数和指数存储在entry中。
  • 将条目存储在链接列表中。

这是一个工作样本:

String equation = "18x^75-4x^56+18x^37+18x^19-18x^9-12";
String[] terms = equation.split("\\+|(?=\\-)");
Arrays.stream(terms).forEach(System.out::println);
List list = new LinkedList<Map.Entry<Integer, Integer>>();
Arrays.stream(terms).filter(t -> t.contains("x^")).forEach(
        s -> list.add(new AbstractMap.SimpleEntry(Integer.parseInt(s.split("x\\^")[0]), Integer.parseInt(s.split("x\\^")[1]))));
//Finally, add the constant term.
list.add(new AbstractMap.SimpleEntry(Integer.parseInt(terms[terms.length - 1]), 0));