[Java]分解算术表达式二
源码:
- 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分
[Java]分解算术表达式二的更多相关文章
- [Java]分解算术表达式一
源码: package com.hy; import java.io.BufferedReader; import java.io.IOException; import java.io.InputS ...
- java实现算术表达式求值
需要根据配置的表达式(例如:5+12*(3+5)/7.0)计算出相应的结果,因此使用java中的栈利用后缀表达式的方式实现该工具类. 后缀表达式就是将操作符放在操作数的后面展示的方式,例如:3+2 后 ...
- [Java]将算术表达式(中序表达式Infix)转成后续表达式Postfix
Inlet类: package com.hy; import java.io.BufferedReader; import java.io.IOException; import java.io.In ...
- Java 8 Lambda 表达式(二)
lambdas 实现 Runnable 接口 下面是使用 lambdas 来实现 Runnable 接口的示例: // 1.1使用匿名内部类 new Thread(new Runnable() { @ ...
- java程序设计-算术表达式的运算
1.团队课程设计博客链接 洪亚文博客链接:http://www.cnblogs.com/201521123065hyw/ 郑晓丽博客链接:http://www.cnblogs.com/zxl3066/ ...
- 利用栈实现算术表达式求值(Java语言描述)
利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...
- [Java]算术表达式求值之二(中序表达式转后序表达式方案,支持小数)
Inlet类,入口类,这个类的主要用途是验证用户输入的算术表达式: package com.hy; import java.io.BufferedReader; import java.io.IOEx ...
- 基于Java的简易表达式解析工具(二)
之前简单的介绍了这个基于Java表达式解析工具,现在把代码分享给大家,希望帮助到有需要的人们,这个分享代码中依赖了一些其他的类,这些类大家可以根据自己的情况进行导入,无非就是写字符串处理工具类,日期处 ...
- [Java]算术表达式求值之一(中序表达式转后序表达式方案)
第二版请见:https://www.cnblogs.com/xiandedanteng/p/11451359.html 入口类,这个类的主要用途是粗筛用户输入的算术表达式: package com.h ...
随机推荐
- vue记录错误和警告日志
https://blog.csdn.net/lucky___star/article/details/95491657 https://blog.csdn.net/weixin_34204057/ar ...
- js判断变量是否为undefined
可能很多朋友认为undefined是在js中未定义变量时才会提示的错误,其实不然undefined 是js中的一特殊的变量,我们也可以提前定义哦,下面我来介绍js undefined 用法. Java ...
- MySQL索引之数据结构及算法原理
MySQL索引之数据结构及算法原理 MySQL支持多个存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等.本文只关注BTre ...
- orcle_day02
第三章:单值函数 函数分为: 1.单值函数 1.字符函数 2.日期函数 3.转换函数 4.数字函数 2.分组函数(后面的章节再做学习) 哑表dual dual是一个虚拟表,用来构成select的语法规 ...
- Tensorflow源码编译常见问题点总结
Tensorflow源码编译分两种:一种是本地源码编译,另一种是针对ARM平台的源码编译. 接下来分别介绍: 一.本地编译 本地编译时,使用的编译工具是本地GCC. 一般会碰到以下问题: 第1个:ex ...
- VMware Horizon Client剪贴板异常问题解决
接到用户反馈现象是:登录ERP系统操作是,无法复制粘贴本地电脑上的数据. 处理过程: 1.在域控服务器上建立独立的Horizon Computer OU,把所有RDS加入在改OU中 2.针对Horiz ...
- js 实现图片预览的两种方式
第一种方式:(使用bloburl) 格式为: blob:http://localhost:8080/9d1c3f82-90ff-4891-a1a3-9cb9a9782899 blob:http://l ...
- OpenCascade建模:构建圆环API--BRepPrimAPI_MakeTortus()
构建圆环API--BRepPrimAPI_MakeTortus() 函数语法: BRepPrimAPI_MakeTortus( const Standard_Real R1, const Standa ...
- javascript中创建对象的方式及优缺点(二)
一.工厂模式 流程: 定义一个函数,函数返回对象. 适用场景: 需要创建多个对象,都是Object类型. 优点:完成了返回一个对象的要求. 缺点: 对象没有一个具体的类型,无法通过constructo ...
- 最小生成树问题:kruskal算法
struct edge(int u,v,cost;};bool comp(const edge& e1,const edge& e2){ return e1.cost<e2 ...