亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java實現字符串四則運算公式解析工具類的方法

2024-07-14 08:41:39
字體:
來源:轉載
供稿:網友

項目中用到用戶定義運算公式進行就算的需求,這樣需要進行字符串四則運算解析,下面提供字符串公式四則運算解析與計算工具類,需要的同學可參考。

工具類如下:FormulaCalculator.java:

package org.nercita.bcp.record.util; import java.util.ArrayList;import java.util.LinkedList; /** * @author zhangwenchao * @since 2016-08-26 * 公式計算的工具類 */public class FormulaCalculator {		private static boolean isRightFormat = true; 	public static double getResult(String formula){ 		double returnValue = 0; 		try{ 			returnValue = doAnalysis(formula); 		}catch(NumberFormatException nfe){ 			System.out.println("公式格式有誤,請檢查:" + formula); 		}catch(Exception e){ 			e.printStackTrace(); 		} 		if(!isRightFormat){ 			System.out.println("公式格式有誤,請檢查:" + formula); 		} 		return returnValue;		} 	private static double doAnalysis(String formula){		double returnValue = 0; 		LinkedList<Integer> stack = new LinkedList<Integer>(); 		int curPos = 0; 		String beforePart = ""; 		String afterPart = ""; 		String calculator = ""; 		isRightFormat = true; 		while(isRightFormat&&(formula.indexOf('(') >= 0||formula.indexOf(')') >= 0)){						curPos = 0; 			for(char s : formula.toCharArray()){ 				if(s == '('){  					stack.add(curPos); 				}else if(s == ')'){  					if(stack.size() > 0){  						beforePart = formula.substring(0, stack.getLast());  						afterPart = formula.substring(curPos + 1);  						calculator = formula.substring(stack.getLast() + 1, curPos);  						formula = beforePart + doCalculation(calculator) + afterPart;  						stack.clear();  						break;  					}else{  						System.out.println("有未關閉的右括號!");  						isRightFormat = false;  					} 				} 				curPos++; 			} 			if(stack.size() > 0){ 				System.out.println("有未關閉的左括號!"); 				break; 			} 		} 		if(isRightFormat){ 			returnValue = doCalculation(formula); 		} 		return returnValue; 	} 		private static double doCalculation(String formula) { 		ArrayList<Double> values = new ArrayList<Double>(); 		ArrayList<String> operators = new ArrayList<String>(); 		int curPos = 0; 		int prePos = 0;		int minus = 0;				for (char s : formula.toCharArray()) { 			 if ((s == '+' || s == '-' || s == '*' || s == '/') && minus !=0 && minus !=2) { 								 			 				 values.add(Double.parseDouble(formula.substring(prePos, curPos).trim())); 								 operators.add("" + s); 								 prePos = curPos + 1;				 				 minus = minus +1;			 }else{				 				 minus =1;				 			 }			 curPos++; 				} 		values.add(Double.parseDouble(formula.substring(prePos).trim())); 		char op; 		for (curPos = 0; curPos <= operators.size() - 1; curPos++) {										op = operators.get(curPos).charAt(0); 			switch (op) { 			case '*': 				values.add(curPos, values.get(curPos) * values.get(curPos + 1)); 				values.remove(curPos + 1); 				values.remove(curPos + 1); 				operators.remove(curPos); 				curPos = -1;				break; 			case '/': 				values.add(curPos, values.get(curPos) / values.get(curPos + 1)); 				values.remove(curPos + 1); 				values.remove(curPos + 1); 				operators.remove(curPos); 				curPos = -1;				break; 			} 		} 		for (curPos = 0; curPos <= operators.size() - 1; curPos++) { 			op = operators.get(curPos).charAt(0); 			switch (op) { 			case '+': 				values.add(curPos, values.get(curPos) + values.get(curPos + 1)); 				values.remove(curPos + 1); 				values.remove(curPos + 1); 				operators.remove(curPos); 				curPos = -1;				break; 			case '-': 				values.add(curPos, values.get(curPos) - values.get(curPos + 1)); 				values.remove(curPos + 1); 				values.remove(curPos + 1); 				operators.remove(curPos); 				curPos = -1;				break; 			} 		} 		return values.get(0).doubleValue();	} 	public static void main(String[] args) {	 		System.out.println(FormulaCalculator.getResult("3-(4*5)+5"));			System.out.println(FormulaCalculator.getResult("7/2-(-4)"));					System.out.println(FormulaCalculator.getResult("1287763200000-1276272000000")/(3600*24*1000));	}	}

支持四則運算,同時支持負數解析。

另附,小數數據保留位數工具類,SetNumberPrecision.java

package org.nercita.bcp.record.util; import java.text.DecimalFormat; /**  * @author zhangwenchao * 小數點 精度的工具類 */ public class SetNumberPrecision {			public static String setNumberPrecision(double x,int Number){		 		String p="#########0";		 		if(Number==0){			 			p="#########0";		 		}else{		  			p="#########0.";		  			for(int i=0;i<Number;i++){//for的巧妙運用		   				p=p+"0"; 		  			}		 		}		  		DecimalFormat f = new DecimalFormat(p); 		  		String s = f.format(x).toString(); 		  		return s;		 	}	}

以上這篇java實現字符串四則運算公式解析工具類的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成人黄色在线| 国产日韩在线亚洲字幕中文| 欧美成人亚洲成人| 日韩在线视频中文字幕| 国产精品视频在线播放| 色综合天天综合网国产成人网| 色偷偷噜噜噜亚洲男人| 国产成人在线一区二区| 欧美性理论片在线观看片免费| 国产午夜精品免费一区二区三区| 国产精品天天狠天天看| 这里只有精品视频在线| 国产婷婷97碰碰久久人人蜜臀| 91精品久久久久久久久不口人| 欧美性生交大片免网| 亚洲一区二区在线| 亚洲精品理论电影| 成人黄色av免费在线观看| 亚洲成人性视频| 国产成人精品免高潮在线观看| 亚洲精品中文字幕av| 国产精品1234| 日韩精品亚洲元码| 日本午夜人人精品| 日韩av综合网| 国产精品稀缺呦系列在线| 伊人伊成久久人综合网站| 亚洲电影免费观看高清完整版| 精品国偷自产在线| 国产美女久久精品香蕉69| 欧美精品久久久久久久久| 亚洲精品视频二区| 青青在线视频一区二区三区| 午夜精品三级视频福利| 久国内精品在线| 成人免费网站在线观看| 日本高清+成人网在线观看| 国产精品va在线播放我和闺蜜| 91精品国产自产在线老师啪| 国产欧美日韩精品专区| 亚洲精品美女在线观看播放| 深夜精品寂寞黄网站在线观看| 一区二区三区天堂av| 日韩精品免费在线观看| 国产91精品黑色丝袜高跟鞋| 久久五月天综合| 亚洲欧美制服中文字幕| 国产精品一区电影| 欧美天堂在线观看| 九九久久综合网站| 久久五月情影视| 91视频九色网站| 国产精品久久久久久中文字| 久久99亚洲精品| 亚洲欧洲激情在线| 久久国产精品久久久久| 91高清在线免费观看| 日韩大陆欧美高清视频区| 国产欧亚日韩视频| www.美女亚洲精品| 日韩动漫免费观看电视剧高清| 日韩一区二区三区xxxx| 亚洲在线免费观看| 国产999视频| 精品色蜜蜜精品视频在线观看| 4438全国亚洲精品在线观看视频| 国产香蕉一区二区三区在线视频| 夜夜嗨av一区二区三区免费区| 亚洲精品资源在线| 最近2019年日本中文免费字幕| 国产亚洲免费的视频看| 欧美国产第二页| 一区二区三区视频免费在线观看| 永久免费精品影视网站| 日韩暖暖在线视频| 日韩毛片中文字幕| 国产精品jizz在线观看麻豆| 最近中文字幕日韩精品| 人妖精品videosex性欧美| 欧美激情视频一区二区三区不卡| 欧美老少做受xxxx高潮| 久久精品99久久久香蕉| 日韩精品免费观看| 国产成人福利夜色影视| 成人黄色av网| 国产精品高潮呻吟久久av无限| 国产精品xxxxx| 久久99精品久久久久久噜噜| www.久久草.com| 操日韩av在线电影| 日韩精品极品在线观看| 亚洲精品视频网上网址在线观看| 中文字幕精品久久久久| 日本午夜在线亚洲.国产| 亚洲黄在线观看| 中日韩美女免费视频网址在线观看| 都市激情亚洲色图| 91高清视频在线免费观看| 国产亚洲欧美日韩一区二区| 久久久久久这里只有精品| 亚洲高清一二三区| 久久亚洲精品国产亚洲老地址| 亚洲国产欧美精品| 久久综合伊人77777| 久久精品青青大伊人av| 成人妇女淫片aaaa视频| 成人深夜直播免费观看| 国产一区二区日韩精品欧美精品| 欧美日本国产在线| 中文字幕不卡在线视频极品| 欧美一级bbbbb性bbbb喷潮片| 草民午夜欧美限制a级福利片| 色无极亚洲影院| 日韩福利伦理影院免费| 91免费国产视频| 国产成人久久久精品一区| 成人久久一区二区三区| 亚洲日本aⅴ片在线观看香蕉| 中文字幕精品www乱入免费视频| 国产亚洲精品va在线观看| 久久精品国产一区二区电影| 亚洲欧美成人在线| 日韩欧美在线播放| 97超级碰在线看视频免费在线看| 国产精品视频一区二区三区四| 日韩中文视频免费在线观看| 欧美精品免费在线观看| 国产精品情侣自拍| 久久久亚洲精品视频| 91香蕉国产在线观看| 欧美大胆在线视频| 亚洲综合精品伊人久久| 亚洲国产美女久久久久| 国产精品久久久久久久久影视| 久久亚洲精品中文字幕冲田杏梨| 92看片淫黄大片欧美看国产片| 91国产美女在线观看| 日韩精品视频免费专区在线播放| 色综合天天综合网国产成人网| 中文国产亚洲喷潮| 亚洲国产精品va在线看黑人动漫| 午夜精品久久久久久久99热浪潮| 国产综合在线视频| 91精品中文在线| 欧美高清在线播放| 国产欧美日韩最新| 日韩高清中文字幕| 高清视频欧美一级| 日韩电影免费观看中文字幕| 国产精品主播视频| 国产综合久久久久久| 欧美性xxxx极品hd欧美风情| 91午夜在线播放| 97久久精品视频| 91精品久久久久久久久久久| 日韩在线精品视频| 日韩欧美国产免费播放| 中文字幕日韩精品在线观看| 欧美成人免费全部| 国产精品免费看久久久香蕉| 亚洲欧美国产视频| 日韩精品在线免费观看| 国产精品6699| 国产精品一区二区三区久久久|