`
cqh520llr
  • 浏览: 509958 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

SPFS_EXPRESS 字符串 公式 计算 字符串型表达式的值

 
阅读更多
public double eval(String exp) {
		List<String> list = infixExpToPostExp(exp);
		return doEval(list);
	}

	public double doEval(List<String> list) {
		Stack<String> stack = new Stack<String>();
		String element;
		double n1, n2, result;
		try {
			for (int i = 0; i < list.size(); i++) {
				element = list.get(i);
				if (isOperator(element)) {
					n1 = Double.parseDouble(stack.pop());
					n2 = Double.parseDouble(stack.pop());
					result = doOperate(n2, n1, element);
					stack.push(new Double(result).toString());
				} else {
					stack.push(element);
				}
			}
			return Double.parseDouble(stack.pop());
		} catch (RuntimeException e) {
			throw new IllegalExpressionException(e.getMessage());
		}
	}
	
	public SPFS_EXPRESS() {

	}
	
	
	public double doOperate(double n1, double n2, String operator) {
		if (operator.equals("+"))
			return n1 + n2;
		else if (operator.equals("-"))
			return n1 - n2;
		else if (operator.equals("*"))
			return n1 * n2;
		else
			return n1 / n2;
	}

	public boolean isOperator(String str) {
		return str.equals("+") || str.equals("-") || str.equals("*")
				|| str.equals("/");
	}

	public List<String> infixExpToPostExp(String exp) {
		List<String> postExp = new ArrayList<String>();
		StringBuffer numBuffer = new StringBuffer();
		Stack<Character> opStack = new Stack<Character>();
		char ch, preChar;
		opStack.push('#');
		try {
			for (int i = 0; i < exp.length();) {
				ch = exp.charAt(i);
				switch (ch) {
				case '+':
				case '-':
					if(i-1<0){
						numBuffer.append(ch);
						ch = exp.charAt(++i);
						break;
					}else{
						char c = exp.charAt(i-1);
						if(!Character.isDigit(c)){
							numBuffer.append(ch);
							ch = exp.charAt(++i);
							break;
						}
					}
				case '*':
				case '/':
					preChar = opStack.peek();
					while (priority(preChar) >= priority(ch)) {
						postExp.add("" + preChar);
						opStack.pop();
						preChar = opStack.peek();
					}
					opStack.push(ch);
					i++;
					break;
				case '(':
					opStack.push(ch);
					i++;
					break;
				case ')':
					char c = opStack.pop();
					while (c != '(') {
						postExp.add("" + c);
						c = opStack.pop(); 
					}
					i++;
					break;
				case '#':
					char c1;
					while (!opStack.isEmpty()) {
						c1 = opStack.pop();
						if (c1 != '#')
							postExp.add("" + c1);
					}
					i++;
					break;
				case ' ':
				case '\t':
					i++;
					break;
				default:
					if ('.'==ch || Character.isDigit(ch)) {
						while (Character.isDigit(ch)) {
							numBuffer.append(ch);
							ch = exp.charAt(++i);
						}
						if('.'==ch){
							numBuffer.append('.');
							ch = exp.charAt(++i);
						}else{
							postExp.add(numBuffer.toString());
							numBuffer = new StringBuffer();
						}
					} else {
						throw new IllegalExpressionException("illegal operator");
					}
				}
			}
		} catch (RuntimeException e) {
			throw new IllegalExpressionException(e.getMessage());
		}
		return postExp;
	}

	public int priority(char op) {
		switch (op) {
		case '+':
		case '-':
			return 1;
		case '*':
		case '/':
			return 2;
		case '(':	
		case '#':
			return 0;
		}
		throw new IllegalExpressionException("Illegal operator");
	}

	public static void main(String[] args) {
		System.out.println("AB+AB-BC+ABC*DAB+AB".replaceAll("\\bAB\\b", "1"));
		SPFS_EXPRESS eval = new SPFS_EXPRESS();
		double result = eval.eval("1*2+16-(10.5-(8+1))#");
		System.out.println(result);
	}

	class IllegalExpressionException extends RuntimeException {
		private static final long serialVersionUID = 1L;
		public IllegalExpressionException() {

		}
		public IllegalExpressionException(String info) {
			super(info);
		}
	}
valu=valu.replaceAll("\\b学历津贴\\b", PAY_41);
				  valu=valu.replaceAll("\\b培训津贴\\b", PAY_42);
				  valu=valu.replaceAll("\\b其它\\b", PAY_43);
				  StringBuffer numBuffer44 = new StringBuffer();
				  numBuffer44.append(valu);
				  numBuffer44.append("#");
				  double test44=spfsExpress.eval(numBuffer44.toString());

分享到:
评论

相关推荐

    汉光HK-SPFS 智慧安全用电管理平台 智慧安全云平台.pdf

    汉光电气HK-SPFS智慧安全用电管理平台运用网格化管理和智能测控、物联网、云计算等技术,对电气消防重点场所内的建筑、人员、设备、环境采取四维一体监控模式,有效解决重点场所电气消防监管难题,全面扼制电气火灾隐患...

    Office2013右键菜单SkyDrive Pro为灰色解决办法

    - 转至`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell`,依次将`SPFS.BrowseOnSharePoint`、`SPFS.CopyLink`、`SPFS.ResolveError`和`SPFS.Share`这四个子键下的`...

    如何设置win8让网盘更好用?.docx

    对于每个键,双击右侧窗格中的`CommandStateHandler`字符串值,同样将其数值数据清空。这样,SkyDrive Pro的所有子选项按钮都应该能正常工作了。 接下来,我们来解决如何在Windows 8中更方便地使用SkyDrive进行文件...

    恒压供水ABB变频器(无需plc)恒压供水触摸屏通讯程序 1.采用ABB变频器Acs510 SPFS宏自带恒压供水功能; 2

    1.采用ABB变频器Acs510 SPFS宏自带恒压供水功能; 2.用昆仑通态触摸屏直接通讯变频器; 3.变频器自身自带供水功能,省去plc,节约成本,稳定,可靠; 4.参数设置直接在触摸屏里,一键写入,适用一拖三,减少变频...

    liteSPFS系列规格书.pdf

    liteSPFS系列规格书pdf,1、描述 SPF太阳保护熔断器系列已经明确 用于光伏(PV)的保护系统。 这种小型的家庭风格融合(10 x 38毫米)可以安全地 从反向——保护光伏模块和导体 过流条件。 光伏系统已经在大小,所以有 ...

    混凝一沉淀法预处理VAE乳液废水的效能 (2009年)

    沉淀法对vAE乳液废水进行预处理,比较了FeCl3和聚合硫酸铁(sPFs)混凝对浊度及COD指标的去除效果,重点考察了pH值变化对FeCl3混凝效果的影响以及不同助凝剂对Fea3的助凝效能。结果表明,Fecl3对VAE乳液废水的混凝...

    LINUX +MYSQL双机配置

    MySQL作为广泛使用的开源关系型数据库管理系统,提供了多种方式来实现高可用性,其中包括双机热备配置。本篇文章将详细解析如何在Linux环境下配置MySQL的双机热备,包括主从同步(M-S)以及主主同步(M-M)。 首先...

    改进的基于子空间划分的模糊系统模型

    针对模糊系统建模过程中实现结构风险最小化问题,提出改进的基于子空间划分的模糊系统模型(SPFS).使用偏最小二乘法(PLS)建立初始模型,有效地提取对系统解释性最强的信息.通过ε不敏感函数和子空间划分,达到模型的置信...

    C#窗体中播放声音四种操作代码

    spFs.Open(FileName, SpeechStreamFileMode.SSFMOpenForRead, true); ISpeechBaseStream Istream = spFs as ISpeechBaseStream; pp.SpeakStream(Istream, SpeechVoiceSpeakFlags.SVSFIsFilename); spFs.Close();...

    改进的基于子空间划分的模糊系统模型 (2007年)

    针对模糊系统建模过程中实现结构风险最小化问题,提出改进的基于子空间划分的模糊系统模型(SPFS)。他用偏最小二乘法(PLS)建立初始模型。有效地提取对系统解释性最强的信息。通过ε不敏感函数和子空间划分,达到...

    GPS手簿操作软件

    在压缩包中的“spfs2.1.1”很可能是指软件的版本号,这表示这是一个名为SPFS(可能代表“Spectra Positioning Field Software”,即光谱定位现场软件)的程序,版本为2.1.1。通常,软件更新会带来性能提升、新功能...

    基于子空间划分的模糊系统模型辨识

    提出了基于子空间划分的模糊系统模型(SPFS),并给出一种针对SPSF的自适应模型辨识方法.应用遗传算法进行子空间划分方案的优化, 降低了最大子空间的辨识误差,从而得到优化的模型辨识结果.理论分析和仿真计算证明了该...

    Reusing Service Process Fragments with a Consensus Between Service Providers and Users

    Web服务作为一种分布式计算基础设施,由许多不同的交互应用程序模块组成,它们通过私有或公共网络进行通信,虚拟地形成一个单一的逻辑系统。Web服务的主要特点包括通过业务流程描述语言对不同数据资源进行复杂任务的...

    Peredatchik_PSBR:变送器PS BR-开源

    在1.0.0版中创建了以下功能:为AWS KB... 以UEFBS ED501格式为AWP KBR SPFS的测试电路创建付款单; 存储创建的付款单; 卸载pdf格式的付款单; 处理收到的传入消息; 客户端-服务器应用程序,C#开发语言,MS SQL数据库

    SCKY:一种重用服务流程片段的方法

    标题中提到的“SCKY:一种重用服务流程片段的方法”,指的是本文研究的核心内容,即提出一种新的重用服务流程片段(Service Process Fragments,简称SPFs)的方法。这一方法旨在通过利用服务的重用性提高软件开发的...

    美欧禁止俄罗斯使用 SWIFT 系统 对大宗商品市场的影响简析.pdf

    此外,俄罗斯宣布其多家银行已接入中国跨境银行间支付系统(CIPS),并且寻求中国的银行加入俄罗斯自主开发的金融信息传输系统(SPFS)。这些措施旨在绕过SWIFT系统,减轻制裁带来的冲击。 #### 四、对欧盟的影响 ...

Global site tag (gtag.js) - Google Analytics