Java 如何使用StringTokenizer拆分和存储数学表达式?

Java 如何使用StringTokenizer拆分和存储数学表达式?,java,string,math,stringtokenizer,Java,String,Math,Stringtokenizer,这是我第一次使用StringTokenizer,所以我有点不知所措 我的问题就是被问到的,如何使用StringTokenizer将数学表达式的各个部分拆分并存储为变量 我需要第一个数字、运算符和第二个数字,作为我可以处理的独立部分,但我不知道如何做到这一点 我想用做就行了 while(problem.hasMoreTokens()){ String firstNumber = problem.nextToken(); String operator = problem.nex

这是我第一次使用StringTokenizer,所以我有点不知所措

我的问题就是被问到的,如何使用StringTokenizer将数学表达式的各个部分拆分并存储为变量

我需要第一个数字、运算符和第二个数字,作为我可以处理的独立部分,但我不知道如何做到这一点

我想用做就行了

while(problem.hasMoreTokens()){
     String firstNumber = problem.nextToken();
     String operator = problem.nextToken();  
     String secondNumber = problem.nextToken();
}
但这不起作用,我不知道我在用delimeters做什么

有什么指导吗

更新:我只是指像+-/*
而且它也只是一位数,所以像1+2这样的数字你就不会。您可以为自己编写一个正确的scanner类,该类可以识别数字和运算符,并忽略空白。使用
StringTokenizer、
String.split()、
或正则表达式也无法正确地实现这一点。

这是可行的,但可能是您需要使用的,也可能不是(根据Alan Moore对类似问题的回答)


因此,在解析时,必须检查并跳过空标记。

取决于您考虑的运算符。有大量的数学运算(微分、积分、乘法、除法、向量运算等)。您可能希望进一步指定您的问题,以获得更好的帮助。另外,您是否认为这是一个“符号操纵器”,可以处理
2*x
,或者只是数字计算?来自Javadoc for StringTokenizer-“StringTokenizer是一个遗留类,出于兼容性原因保留它,尽管新代码中不鼓励使用它。建议任何寻求此功能的人使用String的split方法或java.util.regex包?
String expr ="(X^10-0.9^10)*(X^10-1.1^10)";   

String ops = "[+\\-\\*/\\^\\(\\)]";
String[] tokens = expr.split("(?<="+ops+")\\s*|\\s*(?="+ops+")");

for(String tok: tokens){
  System.out.println("|"+tok+"|");
}
Look-ahead
b(?=a) match any b followed by a
b(?!a) match any b not followed by a

Look-behind
(?<=a)b match any b that is preceded by an a
(?<!a)b match any b that is not preceded by a
||
|(|
|X|
|^|
|10|
|-|
|0.9|
|^|
|10|
|)|
|*|
|(|
|X|
|^|
|10|
|-|
|1.1|
|^|
|10|
|)|