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 ...
随机推荐
- System.getenv()和System.getProperty() 的区别
1.System.getenv() 方法是获取指定的环境变量的值.它有两种方法,一种是接收参数为任意字符串,当存在指定环境变量时即返回环境变量的值,否则返回null.另外一种是不接受参数,那么返回的是 ...
- SpringBank 开发日志 一种简单的拦截器设计实现
当交易由Action进入Service之前,需要根据不同的Service实际负责业务的不同,真正执行Service的业务逻辑之前,做一些检查工作.这样的拦截器应该是基于配置的,与Service关联起来 ...
- Map的知识点梳理(不包含collections工具类)
一:基础公共方法(map不再是简单的加索引,可以直接命名key,通过key进行遍历) 1.常见的map子类 HashTable:底层是哈希表结构.不允许null键和null值,线程同步 HashMap ...
- C#简单画图Draw研究学习
命名空间:using System.Drawing; Graphics类:有道词典翻译 在C#里是封装一个 GDI+ 绘图图面,此类不能被继承. Pen类:定义用于绘制直线和曲线的对象. 此类不能被继 ...
- 机器学习数据处理时label错位对未来数据做预测
这篇文章继上篇机器学习经典模型简单使用及归一化(标准化)影响,通过将测试集label(行)错位,将部分数据作为对未来的预测,观察其效果. 实验方式 以不同方式划分数据集和测试集 使用不同的归一化(标准 ...
- iOS 技术篇:渐变色的简单实现方式
实现效果 //渐变设置 UIView *view = [[UIView alloc] initWithFrame:CGRectMake(,, [UIScreen mainScreen].bounds. ...
- BZOJ.2437.[NOI2011]兔兔与蛋蛋游戏(二分图博弈 匈牙利)
题目链接 首先空格的移动等价于棋子在黑白格交替移动(设起点移向白格就是黑色),且不会走到到起点距离为奇数的黑格.到起点距离为偶数的白格(删掉就行了),且不会重复走一个格子. (然后策略就同上题了,只不 ...
- 洛谷.3273.[SCOI2011]棘手的操作(左偏树)
题目链接 还是80分,不是很懂. /* 七个操作(用左偏树)(t2表示第二棵子树): 1.合并:直接合并(需要将一个t2中原有的根节点删掉) 2.单点加:把这个点从它的堆里删了,加了再插入回去(有负数 ...
- [BZOJ3080]Minimum Variance Spanning Tree/[BZOJ3754]Tree之最小方差树
[BZOJ3080]Minimum Variance Spanning Tree/[BZOJ3754]Tree之最小方差树 题目大意: 给定一个\(n(n\le50)\)个点,\(m(m\le1000 ...
- BeautifulSoup库的使用方法
from bs4 import BeautifulSoup import lxml html = ''' <html><head><title>The Dormou ...