java 对一个字符串进行加减乘除的运算
记录一个小程序,里面涉及到的JAVA知识点有:字符串扫描,list删除元素的方法,泛型的使用,JAVA中的/要注意的事项。有兴趣的可以看看
package com.demo; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class Calculate { public char add = '+'; public char del = '-'; public char mul = '*'; public char div = '/'; public void calculate(String s){
StringBuffer sbMath = new StringBuffer();
List<String> math = new ArrayList<String>();
List<String> flag = new ArrayList<String>();
List<Integer> mulDiv = new ArrayList<Integer>();
for (int i = 0; i < s.length(); i++) {
char temp = s.charAt(i);
if(temp!= add && temp!= del && temp!=mul && temp!=div){
sbMath.append(String.valueOf(temp));
}else{
if(sbMath.length()==0 && temp==del){
sbMath.append("0");
}
math.add(sbMath.toString());
sbMath.delete(0, sbMath.length());
flag.add(String.valueOf(temp));
if(temp == mul || temp == div){
mulDiv.add(flag.size()-1);
}
}
}
math.add(sbMath.toString());
while(math.size() != 1){
boolean needReIndex = false;
while(mulDiv.size() != 0){
int index = mulDiv.get(0);
if(needReIndex){
index = index -1;
}
Map<String, List<String>> map = this.loopProcess(index, math, flag);
math = map.get("math");
flag = map.get("flag");
mulDiv = this.removeList(Integer.class, mulDiv, 0);
needReIndex = true;
}
while(flag.size() != 0){
Map<String, List<String>> map = this.loopProcess(0, math, flag);
math = map.get("math");
flag = map.get("flag");
}
}
System.out.println(math.get(0));
} private Map<String, List<String>> loopProcess(int index, List<String> math, List<String> flag){
Map<String, List<String>> map = new HashMap<String, List<String>>();
char ch = flag.get(index).charAt(0);
String result = this.getResult(math.get(index).trim(), math.get(index+1).trim(), ch);
math = this.removeList(String.class, math, index);
math = this.removeList(String.class, math, index);
math.add(index, result);
flag = this.removeList(String.class, flag, index);
map.put("math", math);
map.put("flag", flag);
return map;
} private <T> List<T> removeList(Class<T> clazz, List<T> list, int index){
List<T> listTemp = new ArrayList<T>();
for (int i = 0; i < list.size(); i++) {
if(i != index){
listTemp.add(list.get(i));
}
}
return listTemp;
} private String getResult(String b, String e, char flag){
boolean isLong = false;
if(!b.contains(".") && !e.contains(".")){
isLong = true;
}
if(isLong){
if(flag == add){
return String.valueOf(Long.valueOf(b)+Long.valueOf(e));
}else if(flag == del){
return String.valueOf(Long.valueOf(b)-Long.valueOf(e));
}else if(flag == mul){
return String.valueOf(Long.valueOf(b)*Long.valueOf(e));
}else if(flag == div){
return String.valueOf((double)Long.valueOf(b)/Long.valueOf(e));
}else{
throw new RuntimeException("error: "+ b + flag + e);
}
}else{
if(flag == add){
return String.valueOf(Double.valueOf(b)+Double.valueOf(e));
}else if(flag == del){
return String.valueOf(Double.valueOf(b)-Double.valueOf(e));
}else if(flag == mul){
return String.valueOf(Double.valueOf(b)*Double.valueOf(e));
}else if(flag == div){
return String.valueOf((double)Double.valueOf(b)/Double.valueOf(e));
}else{
throw new RuntimeException("error: "+ b + flag + e);
}
} } public static void main(String[] args) {
Calculate t = new Calculate();
String s = "1+2*3-10/3";
t.calculate(s);
} }
java 对一个字符串进行加减乘除的运算的更多相关文章
- Java判断一个字符串中有多少大写字母、小写字母和数字
Java判断一个字符串中有多少大写字母.小写字母和数字 思路: 大写字母就是A-Z之间,小写字母是a-z之间,数字就是0-9之间,于是做判断就好:用到的String知识点,遍历字符串, 长度方法len ...
- Java 获取一个字符串中,另一个字符串出现的次数
Java 获取一个字符串中,另一个字符串出现的次数 思想: 1. indexOf到字符串中到第一次出现的索引2. 找到的索引+被找字符串长度,截取字符串3. 计数器++ 代码实现: public cl ...
- java中一个字符串是另外一个字符串的字串
java中一个字符串是另外一个字符串的字串 String类中有一个方法 public boolean contains(Sting s)就是用来判断当前字符串是否含有参数指定的字符串例s1=“take ...
- Java判断一个字符串是否有中文
Java判断一个字符串是否有中文一般情况是利用Unicode编码(CJK统一汉字的编码区间:0x4e00–0x9fbb)的正则来做判断,但是其实这个区间来判断中文不是非常精确,因为有些中文的标点符号比 ...
- MySQL字符串进行加减乘除的运算
原文链接:https://www.jianshu.com/p/2ab2c0dc3cb5 在mysql当中,字符串类型间进行加减乘除运算的时候,会截取字符串以数字开头的那一部分数字进行运算,如果字符串前 ...
- java输入一个字符串,打印出该字符串中字符的所有排列,随机打乱排序
import java.util.ArrayList;import java.util.Collections;import java.util.List; public class Test7{ ...
- JAVA 判断一个字符串是不是一个合法的日期格式
原文:http://www.cnblogs.com/xdp-gacl/p/3548307.html 最近开发公司的项目,一直找不到合适的正则表达式可以判断一个字符串是否可以转成日期,今天发现可以采用S ...
- java判断一个字符串是否包含某个字符
一.contains方法 1:描述 java.lang.String.contains() 方法返回true,当且仅当此字符串包含指定的char值序列 2:声明 public boolean cont ...
- Java判断一个字符串str不为空:方法及时间效率
判断一个字符串str不为空的方法有: 1.str == null; 2.”“.equals(str): 3.str.length <= 0; 4.str.isEmpty(): 注意:length ...
随机推荐
- BZOJ 4767 两双手
题解: 发现这种题目虽然可以想出来,但磕磕碰碰得想挺久的 根据数学可以知道组成方案是唯一的(集合) 然后发现每个使用的大小可能是接近n^2的 直接dp(n^4)是过不了的 那么先观察观察 我们可以把每 ...
- work工作消息队列Round-robin与Fair dispatch
一:介绍 1.模型 有两种情形,分别是轮训分发与公平分发. 2.出现的场景 考虑到simple queue中的缺点. 因为生产者发送消息后,消费者消费要花费时间,这个会造成消息的堆积. 二:Round ...
- Ubuntu 18.04安装Codeblocks
安装步骤: 一:首先安装简版CodeBlocks sudo apt install codeblocks 二:把编译环境,C库.C++库和Boost库装好 sudo apt install build ...
- [OpenCV-Python] OpenCV 中视频分析 部分 VI
部分 VI视频分析 OpenCV-Python 中文教程(搬运)目录 39 Meanshift 和 和 Camshift 目标 • 本节我们要学习使用 Meanshift 和 Camshift 算法在 ...
- BASH if/while/until loop
#/bin/bash ]; then counter=" counter1=" echo "for loop:" $); do echo $i done ); ...
- python-docx
pip install python-docx 注意不要直接下载docx包 from docx import Document from docx.shared import RGBColor,Inc ...
- Python3NumPy——ndarray对象
Python3NumPy——ndarray对象 1.前沿 推荐导入语法:import numpy as np NumPy中使用ndarray对象表示数组,ndarray是NumPy库的核心对象 2.创 ...
- python面向对象编程练习
练习题 1.面向对象三大特性,各有什么用处,说说你的理解. 面向对象的三大特性: 1.继承:解决代码的复用性问题 2.封装:对数据属性严格控制,隔离复杂度 3.多态性:增加程序的灵活性与可扩展性 2. ...
- CAD常用的快捷键命令
CAD常用的快捷键命令大全,主要包括快捷键命令的键盘操作和所对应的快捷命令,方便查找和使用,对cad初学者能够快速提高绘图速度.图文并茂,非常实用. 一:常用功能键 F1: 获取帮助 F2: 实现作图 ...
- Saltstack 安装 命令
主机规划 10.0.0.21 master 10.0.0.22 minion 10.0.0.23 minion 基础环境 [root@10.0.0.21 ~]# cat /etc/redhat-rel ...