对输入字符串进行求值java代码
时间: 2024-01-04 11:04:16 浏览: 65
java代码-使用java解决输入一个字符串,确定每个字符串的个数,然后按照个数的多少升序输出的源代码
好的,我可以帮助您实现对字符串的求值。以下是示例Java代码:
```
import java.util.Stack;
public class EvaluateString {
public static int evaluate(String expression) {
char[] tokens = expression.toCharArray();
//存放数值的栈
Stack<Integer> values = new Stack<Integer>();
//存放运算符的栈
Stack<Character> operators = new Stack<Character>();
for (int i = 0; i < tokens.length; i++) {
//如果是空格则忽略
if (tokens[i] == ' ')
continue;
//如果是数字则将它存入数值栈
if (tokens[i] >= '0' && tokens[i] <= '9') {
StringBuffer sbuf = new StringBuffer();
//可能存在多位数字,需拼接
while (i < tokens.length && tokens[i] >= '0' && tokens[i] <= '9')
sbuf.append(tokens[i++]);
values.push(Integer.parseInt(sbuf.toString()));
i--;
}
//如果是左括号,将其存入运算符栈
else if (tokens[i] == '(')
operators.push(tokens[i]);
//如果是右括号,则弹出栈顶的运算符并将两个数值栈的栈顶元素进行计算
else if (tokens[i] == ')') {
while (operators.peek() != '(')
values.push(applyOp(operators.pop(), values.pop(), values.pop()));
operators.pop();
}
//如果是运算符,则弹出栈顶的运算符进行计算
else if (tokens[i] == '+' || tokens[i] == '-' ||
tokens[i] == '*' || tokens[i] == '/') {
while (!operators.empty() && hasPrecedence(tokens[i], operators.peek()))
values.push(applyOp(operators.pop(), values.pop(), values.pop()));
operators.push(tokens[i]);
}
}
//计算剩下在栈中的运算符
while (!operators.empty())
values.push(applyOp(operators.pop(), values.pop(), values.pop()));
//返回运算结果
return values.pop();
}
//计算两个数的运算结果
public static int applyOp(char op, int b, int a) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
if (b == 0)
throw new UnsupportedOperationException("除数不能为0");
return a / b;
}
return 0;
}
//判断两个运算符的优先级
public static boolean hasPrecedence(char op1, char op2) {
if (op2 == '(' || op2 == ')')
return false;
if ((op1 == '*' || op1 == '/') && (op2 == '+' || op2 == '-'))
return false;
else
return true;
}
public static void main(String[] args) {
String expression = "10 + 2 * 6";
System.out.println(evaluate(expression));
expression = "100 * 2 + 12";
System.out.println(evaluate(expression));
expression = "100 * ( 2 + 12 )";
System.out.println(evaluate(expression));
expression = "( 16 + 3 ) * 2 / 11";
System.out.println(evaluate(expression));
}
}
```
该代码实现了基本的四则运算,包括加、减、乘、除和括号。您可以在 `main` 函数中尝试不同的表达式并查看运算结果。
阅读全文