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 ...
随机推荐
- Python列表split方法
转载自:https://www.cnblogs.com/douzi2/p/5579651.html 1.split翻译为分裂. split()就是将一个字符串分裂成多个字符串组成的列表. 2.spl ...
- CSS 3. 文本|字体|背景|定位
1.文本属性和字体属性 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- 091实战 Nginx配置(日志服务器中关于日志的产生)
一:概括 1.需要配置的概括 定义日志格式 日志的分割字段:^A 日志格式:IP地址^A服务器时间^A请求参数 配置location,记录请求日志到本地磁盘 将数据按照给定的日志格式存储到本地磁盘 二 ...
- iOS企业版应用发布(部分低版本系统)无法安装到最新版app的问题-缓存导致
通过自己网站发布企业版app时,经过测试发现在部分已安装过旧版app的低版本ios手机存在这样的问题 :扫码覆盖安装新版app,安装到的仍然是就版本的app.这样就导致部分用户一直无法更新到最新版本. ...
- SQLite中的WHERE子句
SQLite中的WHERE子句 WHERE子句用于从FROM子句生成的工作表中过滤行.它提供了对每一行进行判断的表达式.当表达式返回的值为false或NULL时,此行就会被丢弃.这种丢弃只是删除记录, ...
- iOS 11开发教程(十九)iOS11应用视图美化按钮之设置按钮的外观
iOS 11开发教程(十九)iOS11应用视图美化按钮之设置按钮的外观 美化按钮说白了就是对按钮的属性进行设置,设置按钮的属性有两种方法:一种是使用编辑界面中的属性检查器:另一种是使用代码进行设置.以 ...
- CF868 F. Yet Another Minimization Problem 决策单调优化 分治
目录 题目链接 题解 代码 题目链接 CF868F. Yet Another Minimization Problem 题解 \(f_{i,j}=\min\limits_{k=1}^{i}\{f_{k ...
- BZOJ 5381 or & Codeforces 623E Transforming Sequence DP+NTT
两道题题意都是一样的 不过$CF$的模数是$10^9+7$ 很简单的分析发现$A_i$项一定要有一个之前没有出现过的二进制位才能满足条件 考虑$DP$来做 设$f_{i,j}$表示$i$个数用了二进制 ...
- Java 多线程 interrupt方法
interrupt 下面是interrupt方法的文档的一部分: * <p> If this thread is blocked in an invocation of the {@lin ...
- FastDFS安装注意事项
配置中设定的目录必须提前创建,不会自动创建. 先启动所有tracker再启动storage,一个storage必须能连接到所有配置的tracker才会成功启动. Docker中运行fdfs必须使用ho ...