import java.util.*;
public class Pemdas {
public static double Express(String str)
{
Stack<Double> num = new Stack<Double>();
Stack<String> op = new Stack<String>();
String number = "[0-9]*"; // any digit from 0-9
for (int i = 0; i < str.length(); i++)
{
if (str.substring(i,i+1).equals(number))
num.push(Double.parseDouble(str.substring(i, i+1)));
else if (str.substring(i, i+1).equals("+"))
op.push(str.substring(i, i +1));
System.out.println(str);
}
double n = num.pop();
if (op.pop().equals("+"))
n = n + num.pop();
return n;
}
public static void main(String[] args)
{
System.out.print("Enter an Expression: ");
String ex = StdIn.readString(); // This is where I enter my string input
System.out.println(Express(ex));
}
}
假设我有一个“5 + 5”的String变量作为我的输入。在for循环中,5应该被推入num堆栈,但我不断得到一个ESE,我不明白为什么。
答案 0 :(得分:3)
当您想与正则表达式匹配时,您正在使用equals()
。 equals()
用于比较文字字符串。您可能想要matches()
:
if (str.substring(i,i+1).matches(number))
num.push(Double.parseDouble(str.substring(i, i+1)));
事实上,你根本不需要正则表达式。您可以通过执行以下操作来简化循环:
for (int i = 0; i < str.length(); i++)
{
char c = str.charAt(i);
if (Character.isDigit(c))
num.push((double) (c - '0'));
else if (c == '+')
op.push("+");
System.out.println(str);
}
最后,请遵循Java的命名惯例,并调用您的方法express()
而不是Express()
。