需求:
边输入数据,边得到计算值。
比如String = "1+2*3+4";
输出:1 3 7 11
Java代码实现:
@Test
public void testAdd() {
//测试数据
String str ="1+3+12*22";
char[] chars = str.toCharArray();
//记录前数据
StringBuffer sb1 =new StringBuffer();
//记录后数据
StringBuffer sb2 =new StringBuffer();
Integer result =0;
//保存乘号前面的值
Integer iniSb =0;
//相乘值
Integer cenNum;
//保存相乘值结果
Integer iniCen;
//运算符号标识
boolean flag =true;
for (int i =0; i < chars.length; i++) {
if (chars[i] >='0' && chars[i] <='9') {
if (flag) {
if (sb1.length() >0) {
//如果前面有数据则先减去
result -= Integer.parseInt(sb1.toString());
}
sb1.append(chars[i]);
result += Integer.parseInt(sb1.toString());
}else {
if (sb2.length() >0) {
//如果前面有数据则先减去
result -= (iniSb * Integer.parseInt(sb2.toString()));
}
sb2.append(chars[i]);
if (sb2.length() >1) {
//将sb1恢复初始值
sb1.setLength(0);
sb1.append(iniSb);
}
if (sb1.length() >0 && sb2.length() >0) {
cenNum = Integer.parseInt(sb1.toString());
//中间值
iniCen= cenNum * Integer.parseInt(sb2.toString());
sb1.setLength(0);
sb1.append(iniCen);
result += iniCen;
}
}
System.out.println(result);
}else if (chars[i] =='+') {
flag =true;
sb1.setLength(0);
sb2.setLength(0);
}else if (chars[i] =='*') {
//改变标识状态
flag =false;
//初始化乘号前面的值
iniSb = Integer.parseInt(sb1.toString());
//初始化称号后面的值
sb2.setLength(0);
//将值改为未进行乘号运算时的值
result -= iniSb;
}else {
continue;
}
}
}
本方法只计算加法和乘法,也可进行计算。
程序测试:
String str = "1*22*33";
输出结果:
程序测试:
String str = "11*22*33";
输出结果:
程序测试:
String str = "11+22+33";
输出结果:
程序测试:
String str = "21+12*13*15+16";
输出结果:
以上是测试结果,保证输入是合法的,如果程序有bug,欢迎指正。