dart 中字符串的数学表达式

Gun*_*ack 4 dart flutter

这是我用来将字符串分成变量和运算符的代码。以便可以对它们进行操作。

字符串表达式 = "1567x356-234+908/56x12"; int 最后位置 = 0;

  List<double> exprVar = new List<double>();
  List<String> operator = new List<String>();

  for (int i =0; i < expression.length; i++) {

      if (expression[i] == "+" || expression[i] == "-" || expression[i] == "/" || expression[i] == "x") {

        operator.add(expression[i]);

        exprVar.add(double.parse(expression.substring(lastPos, i)));
        lastPos = i+1;
      }

    if (i == expression.length - 1) {
        exprVar.add(double.parse(expression.substring(lastPos, i+1)));
      }

  }

  print("The Numbers are is: $exprVar");
  print("The operators are: $operator");
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 我在这里重新发明轮子吗?dart 中是否有一个我不知道的字符串库函数可以使此代码更方便?

  2. 现在我有了数字和运算符,我是否必须编写代码来确定运算符的优先顺序,或者我可以创建一个巨大的单行表达式并且处理器会为我解决它吗?

Cha*_*ghe 9

使用function_tree
请参阅文档https://pub.dev/packages/function_tree#-installing-tab-

final expressionsExample = [
   '2 + 2 - 2 - 2',
   '(3 + 2)^3',
   '3 * pi / 4',
   '3 * sin(5 * pi / 6)',
   'e^(-1)'
 ];
 for (final expression in expressionsExample) {
   print("'$expression' -> ${expression.interpret()}");
 }
Run Code Online (Sandbox Code Playgroud)

输出将是

'2 + 2 - 2 - 2' -> 0
'(3 + 2)^3' -> 125
'3 * pi / 4' -> 2.356194490192345
'3 * sin(5 * pi / 6)' -> 1.5000000000000009
'e^(-1)' -> 0.36787944117144233
Run Code Online (Sandbox Code Playgroud)