分析:
- 读取表达式字符串
- 用 StringBuffer 类型的变量 sb 把读取到的数字拼接成字符串
- 每当遇到一个运算符,就把拼接成的 sb 字符串转成数字 number2,用上一个运算符进行运算。然后把当前的运算符保留下来,更新运算符
- 处理边界
package no1_1;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
String s=input.nextLine();
System.out.println(expression(s));
}
public static int expression(String s) {
StringBuffer sb=new StringBuffer();//用StringBuffer类型比String类型要灵活,因为String类型的长度不能随意改变
int result=0;//运算结果
char operator=' ';//运算符
for(int i=0;i<s.length();i++) {
char c=s.charAt(i);
if(Character.isDigit(c)) {//c为数字
sb.append(c);//拼接数字
}else {//c为运算符
int number2=Integer.parseInt(sb.toString());//类型转换:StringBuffer->String->Integer,得到一个运算数据
if(operator==' ') {//此处为表达式中的第一个数据
result=number2;
}else if(operator=='+') {//当前数字用在它前面的运算符进行运算
result+=number2;
}else if(operator=='-') {
result-=number2;
}
operator=c;//把当前数字后面的运算符保留下来,用于下一次运算
sb.setLength(0);//清空字符串,准备存储一个运算数据
}
}
return result;
}
}
?