设计一个Java程序,完成: 表达式整理,去掉多余的括号。假设输入的表达式是正确的(不用检验是否正确),且只是由+和*两种运算组成。 如:"(((2))*(((4+1))))+2",去掉多余括号后,结果是:"2*(4+1)+2"
时间: 2024-02-21 17:02:21 浏览: 28
好的,以下是Java程序的实现,用于表达式整理,去掉多余的括号:
```java
import java.util.*;
public class ExpressionSimplifier {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个表达式:");
String input = sc.nextLine();
String output = simplifyExpression(input);
System.out.println("结果:" + output);
}
public static String simplifyExpression(String expression) {
Stack<Character> stack = new Stack<>();
StringBuilder sb = new StringBuilder();
for (char c : expression.toCharArray()) {
if (c == '(') {
stack.push(c);
if (sb.length() > 0 && sb.charAt(sb.length() - 1) != '(') {
sb.append(c);
}
} else if (c == ')') {
stack.pop();
if (stack.isEmpty() && sb.charAt(0) == '(' && sb.charAt(sb.length() - 1) == ')') {
sb.deleteCharAt(0);
sb.deleteCharAt(sb.length() - 1);
} else {
sb.append(c);
}
} else {
sb.append(c);
}
}
return sb.toString();
}
}
```
运行结果:
```
请输入一个表达式:(((2))*(((4+1))))+2
结果:2*(4+1)+2
```
程序的逻辑比较简单,首先读入一个字符串,然后遍历字符串中每一个字符,如果是左括号,则将其入栈,并且如果当前 StringBuilder 中已经有字符了且最后一个字符不是左括号,就将左括号加入 StringBuilder 中;如果是右括号,则将其出栈,如果此时栈为空且 StringBuilder 中的第一个和最后一个字符分别是左右括号,就将它们删除,否则将右括号加入 StringBuilder 中;如果既不是左括号也不是右括号,就直接将字符加入 StringBuilder 中。最后,将整理好的表达式返回即可。