Java实现的一个简单计算器,有字符分析功能

时间:2022-04-29
本文章向大家介绍Java实现的一个简单计算器,有字符分析功能,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

需求:实现一个简单的计算器来分析一个简单的表达式字符串。

表达式字符串可能包含括号,+ +或减号,非负整数和空格。

例子:“1 + 1 = 2,(1)“= 1(1 -(4 - 5)“= 2

问题分析:这个问题可以通过使用堆栈来解决。

网络配图

Java解决方法

代码如下:

public int calculate(String s) {
// delte white spaces
s = s.replaceAll(" ", "");
Stack<String> stack = new Stack<String>();
char[] arr = s.toCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
if (arr[i] == ' ')
continue;
if (arr[i] >= '0' && arr[i] <= '9') {
sb.append(arr[i]);
if (i == arr.length - 1) {
stack.push(sb.toString());
}
} else {
if (sb.length() > 0) {
stack.push(sb.toString());
sb = new StringBuilder();
}
if (arr[i] != ')') {
stack.push(new String(new char[] { arr[i] }));
} else {
// when meet ')', pop and calculate
ArrayList<String> t = new ArrayList<String>();
while (!stack.isEmpty()) {
String top = stack.pop();
if (top.equals("(")) {
break;
} else {
t.add(0, top);
}
}
int temp = 0;
if (t.size() == 1) {
temp = Integer.valueOf(t.get(0));
} else {
for (int j = t.size() - 1; j > 0; j = j
- 2) {
if (t.get(j - 1).equals("-")) {
temp += 0 -
Integer.valueOf(t.get(j));
} else {
temp += Integer.valueOf
(t.get(j));
}
}
temp += Integer.valueOf(t.get(0));
}
stack.push(String.valueOf(temp));
}
}
}
ArrayList<String> t = new ArrayList<String>();
while (!stack.isEmpty()) {
String elem = stack.pop();
t.add(0, elem);
}
int temp = 0;
for (int i = t.size() - 1; i > 0; i = i - 2) {
if (t.get(i - 1).equals("-")) {
temp += 0 - Integer.valueOf(t.get(i));
} else {
temp += Integer.valueOf(t.get(i));
}
}
temp += Integer.valueOf(t.get(0));
return temp;
}