源码:

  1. package com.hy;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6.  
  7. // 程序入口
  8. public class Inlet {
  9. public static void main(String[] args) throws IOException{
  10. // 取得用户输入的表达式
  11. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  12. String rawExpression = null;
  13. System.out.print("请输入算术表达式:");
  14. rawExpression = br.readLine();
  15.  
  16. // 得到合法的算术表达式
  17. String expression="";
  18. for(int i=0;i<rawExpression.length();i++){
  19. // 拿到表达式的每个字符
  20. char c=rawExpression.charAt(i);
  21. //System.out.print(c+",");
  22.  
  23. if(Character.isDigit(c) || c=='+' || c=='-' || c=='*' || c=='/' || c=='(' || c==')' ){
  24. //System.out.print(c);
  25. expression+=c;
  26. }else{
  27. System.out.print(" "+c+"不是合法的算术表达式字符.");
  28. System.exit(0);
  29. }
  30. }
  31.  
  32. // 送去解析
  33. Parser p=new Parser(expression);
  34. p.print();
  35. }
  36. }

Parser类:

  1. package com.hy;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. public class Parser {
  7. private List<String> list;
  8.  
  9. public Parser(String expression){
  10. list=new ArrayList<String>();
  11.  
  12. String str="";
  13. for(int i=0;i<expression.length();i++){
  14. char c=expression.charAt(i);
  15.  
  16. if(Character.isDigit(c)){
  17. str+=c;
  18. }else{
  19. if(str.length()>0){// 此判断是因为有+(这种符号相连的情况
  20. //System.out.println(str);
  21. list.add(str);
  22. str="";
  23. }
  24.  
  25. //System.out.println(c);
  26. list.add(String.valueOf(c));
  27. }
  28. }
  29.  
  30. if(str.length()>0){// 此判断是因为可能表达式不是以=结尾
  31. //System.out.println(str);
  32. list.add(str);
  33. str="";
  34. }
  35. }
  36.  
  37. public void print(){
  38. for(String str:list){
  39. System.out.println(str);
  40. }
  41. }
  42. }

测试:

  1. 请输入算术表达式:21-232-3232-(4+5)*20
  2. 21
  3. -
  4. 232
  5. -
  6. 3232
  7. -
  8. (
  9. 4
  10. +
  11. 5
  12. )
  13. *
  14. 20

--End--2019年9月2日08点38分

[Java]分解算术表达式二的更多相关文章

  1. [Java]分解算术表达式一

    源码: package com.hy; import java.io.BufferedReader; import java.io.IOException; import java.io.InputS ...

  2. java实现算术表达式求值

    需要根据配置的表达式(例如:5+12*(3+5)/7.0)计算出相应的结果,因此使用java中的栈利用后缀表达式的方式实现该工具类. 后缀表达式就是将操作符放在操作数的后面展示的方式,例如:3+2 后 ...

  3. [Java]将算术表达式(中序表达式Infix)转成后续表达式Postfix

    Inlet类: package com.hy; import java.io.BufferedReader; import java.io.IOException; import java.io.In ...

  4. Java 8 Lambda 表达式(二)

    lambdas 实现 Runnable 接口 下面是使用 lambdas 来实现 Runnable 接口的示例: // 1.1使用匿名内部类 new Thread(new Runnable() { @ ...

  5. java程序设计-算术表达式的运算

    1.团队课程设计博客链接 洪亚文博客链接:http://www.cnblogs.com/201521123065hyw/ 郑晓丽博客链接:http://www.cnblogs.com/zxl3066/ ...

  6. 利用栈实现算术表达式求值(Java语言描述)

    利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...

  7. [Java]算术表达式求值之二(中序表达式转后序表达式方案,支持小数)

    Inlet类,入口类,这个类的主要用途是验证用户输入的算术表达式: package com.hy; import java.io.BufferedReader; import java.io.IOEx ...

  8. 基于Java的简易表达式解析工具(二)

    之前简单的介绍了这个基于Java表达式解析工具,现在把代码分享给大家,希望帮助到有需要的人们,这个分享代码中依赖了一些其他的类,这些类大家可以根据自己的情况进行导入,无非就是写字符串处理工具类,日期处 ...

  9. [Java]算术表达式求值之一(中序表达式转后序表达式方案)

    第二版请见:https://www.cnblogs.com/xiandedanteng/p/11451359.html 入口类,这个类的主要用途是粗筛用户输入的算术表达式: package com.h ...

随机推荐

  1. vue记录错误和警告日志

    https://blog.csdn.net/lucky___star/article/details/95491657 https://blog.csdn.net/weixin_34204057/ar ...

  2. js判断变量是否为undefined

    可能很多朋友认为undefined是在js中未定义变量时才会提示的错误,其实不然undefined 是js中的一特殊的变量,我们也可以提前定义哦,下面我来介绍js undefined 用法. Java ...

  3. MySQL索引之数据结构及算法原理

    MySQL索引之数据结构及算法原理 MySQL支持多个存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等.本文只关注BTre ...

  4. orcle_day02

    第三章:单值函数 函数分为: 1.单值函数 1.字符函数 2.日期函数 3.转换函数 4.数字函数 2.分组函数(后面的章节再做学习) 哑表dual dual是一个虚拟表,用来构成select的语法规 ...

  5. Tensorflow源码编译常见问题点总结

    Tensorflow源码编译分两种:一种是本地源码编译,另一种是针对ARM平台的源码编译. 接下来分别介绍: 一.本地编译 本地编译时,使用的编译工具是本地GCC. 一般会碰到以下问题: 第1个:ex ...

  6. VMware Horizon Client剪贴板异常问题解决

    接到用户反馈现象是:登录ERP系统操作是,无法复制粘贴本地电脑上的数据. 处理过程: 1.在域控服务器上建立独立的Horizon Computer OU,把所有RDS加入在改OU中 2.针对Horiz ...

  7. js 实现图片预览的两种方式

    第一种方式:(使用bloburl) 格式为: blob:http://localhost:8080/9d1c3f82-90ff-4891-a1a3-9cb9a9782899 blob:http://l ...

  8. OpenCascade建模:构建圆环API--BRepPrimAPI_MakeTortus()

    构建圆环API--BRepPrimAPI_MakeTortus() 函数语法: BRepPrimAPI_MakeTortus( const Standard_Real R1, const Standa ...

  9. javascript中创建对象的方式及优缺点(二)

    一.工厂模式 流程: 定义一个函数,函数返回对象. 适用场景: 需要创建多个对象,都是Object类型. 优点:完成了返回一个对象的要求. 缺点: 对象没有一个具体的类型,无法通过constructo ...

  10. 最小生成树问题:kruskal算法

    struct edge(int u,v,cost;};bool comp(const edge& e1,const edge& e2){    return e1.cost<e2 ...