这里初学者到Java,我正在尝试将中缀表达式转换为后缀表达式,但我无法理解如何检查StringTokenizer
创建的令牌是否为数字。我尝试了tokens.equals()
方法,但意识到它不会有效,因为数字并不总是1位数。
public String infixToPostfix() {
Stack<String> s = new Stack<>();
String expression = jtfInfix.getText();
String delims = "+-*/() ";
StringTokenizer strToken = new StringTokenizer(expression, delims, true);
String postFix = "";
while (strToken.hasMoreTokens()) {
String token = strToken.nextToken();
// if the next token is a number, append it to the result
if (token!=delims) {
postFix += token;
}
}
}
答案 0 :(得分:1)
检查String
是一个数字可能会很棘手,因为案例很多。除非您计划接受简单的值,例如正整数(任何数字长度),否则我不建议您自己编写代码。要进行这种简单的检查,您可以使用正则表达式:
token.matches("\\d+");
这将匹配一个或多个数字(数字)。
对于更复杂的匹配(例如十进制值和负数),请参阅How to check if a String is numeric in Java。
使用示例:
"1".matches("\\d+"); // true
"1057".matches("\\d+"); // true
"".matches("\\d+"); // false
"1.0".matches("\\d+"); // false
"-1".matches("\\d+"); // false