源码:
package com.hy; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; // 程序入口 public class Inlet { public static void main(String[] args) throws IOException{ // 取得用户输入的表达式 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String rawExpression = null; System.out.print("请输入算术表达式:"); rawExpression = br.readLine(); // 得到合法的算术表达式 String expression=""; for(int i=0;i<rawExpression.length();i++){ // 拿到表达式的每个字符 char c=rawExpression.charAt(i); //System.out.print(c+","); if(Character.isDigit(c) || c=='+' || c=='-' || c=='*' || c=='/' || c=='(' || c==')' ){ //System.out.print(c); expression+=c; }else{ System.out.print(" "+c+"不是合法的算术表达式字符."); System.exit(0); } } // 送去解析 Parser p=new Parser(expression); p.print(); } }
Parser类:
package com.hy; import java.util.ArrayList; import java.util.List; public class Parser { private List<String> list; public Parser(String expression){ list=new ArrayList<String>(); String str=""; for(int i=0;i<expression.length();i++){ char c=expression.charAt(i); if(Character.isDigit(c)){ str+=c; }else{ if(str.length()>0){// 此判断是因为有+(这种符号相连的情况 //System.out.println(str); list.add(str); str=""; } //System.out.println(c); list.add(String.valueOf(c)); } } if(str.length()>0){// 此判断是因为可能表达式不是以=结尾 //System.out.println(str); list.add(str); str=""; } } public void print(){ for(String str:list){ System.out.println(str); } } }
测试:
请输入算术表达式:21-232-3232-(4+5)*20 21 - 232 - 3232 - ( 4 + 5 ) * 20
--End--2019年9月2日08点38分