[Java]分解算术表达式二
2024-10-07 03:00:47
源码:
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分
最新文章
- Vue.js——60分钟组件快速入门(上篇)
- Eclipse/IDEA使用小技巧
- JavaScript encodeURI(), decodeURI(), encodeURIComponent(), decodeURIComponent()
- C语言笔试常考知识点
- struts.xml中出现Package struts2 extends undefined package struts-default解决办法
- 在EF的code frist下写稳健的权限管理系统:界面设计(四)
- (转)汉字转拼音HanziToPinyin
- 《浅析各类DDoS攻击放大技术》
- C# 判断字符串是否可以转化为数字
- 上传python包到PyPI
- Java出现“Error configuring application listener of class...”类似的错误解决
- Canny边缘检测算法的实现
- 在Notepad++中添加运行快捷键
- 【Linux 操作系统】阿里云服务器 操作实战 部署C语言开发环境(vim配置,gcc) 部署J2EE网站(jdk,tomcat)
- python实现双向链表
- 图片上传插件:webuploader
- 学习笔记: js插件 —— SuperSlide 2 (轮播图插件,PC用)
- B-论文一些好的句子
- 新手向:从不同的角度来详细分析Redis
- 【DB2】慎用nickname,可能会引起效率较低
热门文章
- vue路由(基于VScode开发)
- 记录一次k8s环境尝试过程(初始方案,现在已经做过很多完善,例如普罗米修斯)
- Linux SWAP交换分区维护
- .net Core的例子
- Iterator、Generator、Decorator、Descriptor
- Linux下查看Nginx,tomcat等的并发连接数和连接状态
- LightOJ-1079-Just another Robbery(概率, 背包)
- 什么是IoC和DI?DI是如何实现的?
- [人物存档]【AI少女】【捏脸数据】气质学生
- Java多线程和并发(五),线程的状态