记录一个小程序,里面涉及到的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 对一个字符串进行加减乘除的运算的更多相关文章

  1. Java判断一个字符串中有多少大写字母、小写字母和数字

    Java判断一个字符串中有多少大写字母.小写字母和数字 思路: 大写字母就是A-Z之间,小写字母是a-z之间,数字就是0-9之间,于是做判断就好:用到的String知识点,遍历字符串, 长度方法len ...

  2. Java 获取一个字符串中,另一个字符串出现的次数

    Java 获取一个字符串中,另一个字符串出现的次数 思想: 1. indexOf到字符串中到第一次出现的索引2. 找到的索引+被找字符串长度,截取字符串3. 计数器++ 代码实现: public cl ...

  3. java中一个字符串是另外一个字符串的字串

    java中一个字符串是另外一个字符串的字串 String类中有一个方法 public boolean contains(Sting s)就是用来判断当前字符串是否含有参数指定的字符串例s1=“take ...

  4. Java判断一个字符串是否有中文

    Java判断一个字符串是否有中文一般情况是利用Unicode编码(CJK统一汉字的编码区间:0x4e00–0x9fbb)的正则来做判断,但是其实这个区间来判断中文不是非常精确,因为有些中文的标点符号比 ...

  5. MySQL字符串进行加减乘除的运算

    原文链接:https://www.jianshu.com/p/2ab2c0dc3cb5 在mysql当中,字符串类型间进行加减乘除运算的时候,会截取字符串以数字开头的那一部分数字进行运算,如果字符串前 ...

  6. java输入一个字符串,打印出该字符串中字符的所有排列,随机打乱排序

    import java.util.ArrayList;import java.util.Collections;import java.util.List; public class Test7{   ...

  7. JAVA 判断一个字符串是不是一个合法的日期格式

    原文:http://www.cnblogs.com/xdp-gacl/p/3548307.html 最近开发公司的项目,一直找不到合适的正则表达式可以判断一个字符串是否可以转成日期,今天发现可以采用S ...

  8. java判断一个字符串是否包含某个字符

    一.contains方法 1:描述 java.lang.String.contains() 方法返回true,当且仅当此字符串包含指定的char值序列 2:声明 public boolean cont ...

  9. Java判断一个字符串str不为空:方法及时间效率

    判断一个字符串str不为空的方法有: 1.str == null; 2.”“.equals(str): 3.str.length <= 0; 4.str.isEmpty(): 注意:length ...

随机推荐

  1. 【深入spring】IoC容器的实现

    本文乃学习整理参考而来 IoC概述: 在spring中,IoC容器实现了依赖控制反转,它可以再对象生成或初始化时直接将数据注入到对象中,也可以通过将对象引用注入到对象数据域中的方式来注入方法调用的依赖 ...

  2. LR报错Error -27780: [GENERAL_MSG_CAT_SSL_ERROR]connect to host "XXX.XXX.com" failed解决方法

  3. Codeforces Round #467 (Div. 2) E -Lock Puzzle

    Lock Puzzle 题目大意:给你两个字符串一个s,一个t,长度<=2000,要求你进行小于等于6100次的shift操作,将s变成t, shift(x)表示将字符串的最后x个字符翻转后放到 ...

  4. 基于python的机器学习开发环境安装(最简单的初步开发环境)

    一.安装Python 1.下载安装python3.6 https://www.python.org/getit/ 2.配置环境变量(2个) 略...... 二.安装Python算法库 安装顺序:Num ...

  5. Unity 之 中文乱码

    更改 C#脚本的编码格式: 文件 -> 高级保存选项 -> Unicode

  6. JVM GC-----4、finalize()方法

    finalize()方法是Object类中定义的protect方法.每一个类都可以重写该方法,给出自己的实现.当类在被回收期间,这个方法就可能会被调用到. 为什么说可能?这是由于finalize()的 ...

  7. Spring Boot 项目实战(一)Maven 多模块项目搭建

    一.前言 最近公司项目准备开始重构,框架选定为 Spring Boot ,本篇主要记录了在 IDEA 中搭建 Spring Boot Maven 多模块项目的过程. 二.软件及硬件环境 macOS S ...

  8. xadmin2.0(for Django2.0) 基本设置

    一.下载xadmin 1.使用安装工具安装: pip install git+git://github.com/sshwsfc/xadmin.git@django2 2.下载源码: git clone ...

  9. ES6 中的 Map和Set

    集合的概念以及和数组的区别 其实数组也是集合, 只不过数组的索引是数值类型.当想用非数值类型作为索引时, 数组就无法满足需要了. 而 Map 集合可以保存多个键-值对(key-value), Set ...

  10. go语言爬虫 - TapTap用户都喜欢些什么游戏

    前面的废话 说到爬虫,首先想到的当然是python~ 它在机器学习.爬虫数据分析领域可谓是如日中天,十分热门.但我最近在学习go语言,所以就用go写了 TapTap社区 这是一个高品质的游戏分享社区, ...