源码:

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分

最新文章

  1. Vue.js——60分钟组件快速入门(上篇)
  2. Eclipse/IDEA使用小技巧
  3. JavaScript encodeURI(), decodeURI(), encodeURIComponent(), decodeURIComponent()
  4. C语言笔试常考知识点
  5. struts.xml中出现Package struts2 extends undefined package struts-default解决办法
  6. 在EF的code frist下写稳健的权限管理系统:界面设计(四)
  7. (转)汉字转拼音HanziToPinyin
  8. 《浅析各类DDoS攻击放大技术》
  9. C# 判断字符串是否可以转化为数字
  10. 上传python包到PyPI
  11. Java出现“Error configuring application listener of class...”类似的错误解决
  12. Canny边缘检测算法的实现
  13. 在Notepad++中添加运行快捷键
  14. 【Linux 操作系统】阿里云服务器 操作实战 部署C语言开发环境(vim配置,gcc) 部署J2EE网站(jdk,tomcat)
  15. python实现双向链表
  16. 图片上传插件:webuploader
  17. 学习笔记: js插件 —— SuperSlide 2 (轮播图插件,PC用)
  18. B-论文一些好的句子
  19. 新手向:从不同的角度来详细分析Redis
  20. 【DB2】慎用nickname,可能会引起效率较低

热门文章

  1. vue路由(基于VScode开发)
  2. 记录一次k8s环境尝试过程(初始方案,现在已经做过很多完善,例如普罗米修斯)
  3. Linux SWAP交换分区维护
  4. .net Core的例子
  5. Iterator、Generator、Decorator、Descriptor
  6. Linux下查看Nginx,tomcat等的并发连接数和连接状态
  7. LightOJ-1079-Just another Robbery(概率, 背包)
  8. 什么是IoC和DI?DI是如何实现的?
  9. [人物存档]【AI少女】【捏脸数据】气质学生
  10. Java多线程和并发(五),线程的状态