⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transfer.java

📁 a calculator with some methods of java.math
💻 JAVA
字号:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
import java.util.regex.*;

public class Transfer {


	
	public static String transfer(String s){

		
		Stack<String> operatorStack = new Stack<String>();
		Stack<String>	operandStack = new Stack<String>();

		String ts = addZero(s);
		String[] sts = partition(ts);

		for(String c: sts ){
			if(Comparator.isOperand(c)){ 
				operandStack.push(c); 
				continue;
			}
			else{

				if(c.equals(")")){
					String ch,tmp;					
					while(	((ch = operatorStack.pop()).charAt(ch.length()-1 )) != '(' ){
						StringBuilder tmpsb = new StringBuilder();
						tmp= operandStack.pop();
						tmpsb.append(operandStack.pop()).append(" ").
						append(tmp).append(" ").
						append(ch).append(" ");
						operandStack.push(tmpsb.toString());
					}
					if(ch.length()>1) 
						operandStack.push(operandStack.pop()+ " " + ch.substring(0,ch.length()-1));
					continue;
				}
				
				if(
					c.charAt(c.length()-1 ) == '('||
					operatorStack.isEmpty()||
					Comparator.compare(c, operatorStack.peek())
					) {
					operatorStack.push(c); 
					continue;
				}
				

				
				if(Comparator.compare(operatorStack.peek(), c)){				
					StringBuilder tmpsb = new StringBuilder();
					String tmp = operandStack.pop();
					tmpsb.append(operandStack.pop()).append(" ").
					append(tmp).append(" ").
					append(operatorStack.pop()).append(" ");
					operandStack.push(tmpsb.toString());
					operatorStack.push(c);
			
					continue;
				} 
				else {
					operatorStack.push(c);
					continue;
				}
				
			}
		} 
		StringBuilder tmpsb = new StringBuilder();
		while(!operatorStack.isEmpty()){
			tmpsb = new StringBuilder();
			String ch = operatorStack.pop();
			if(ch.equals("("))
				continue;
			
			String tmp = operandStack.pop();
			if(!operandStack.isEmpty())
				tmpsb
				.append(operandStack.pop()).append(" ")
				.append(tmp).append(" ")
				.append(ch).append(" ");
			else tmpsb.append(ch).append(" ").append(tmp).append(" ");
			operandStack.push(tmpsb.toString());
		}

		return operandStack.pop();
	}

	
	private static String addZero(String s){
		StringBuffer
		sb = new StringBuffer();

	String regex_addZero = "(\\D|^)-";
	Matcher ma =
		Pattern.compile(regex_addZero).matcher(s);

	while(ma.find())
		ma.appendReplacement(sb, ma.group(1)+"0-");
	ma.appendTail(sb);
	return sb.toString();
	}
	private static String[] partition(String ts){
		StringBuffer sbuf = new StringBuffer();
		String regex_operator = "[\\+\\-/\\*\\)]|([a-zA-Z_^\\)]*?\\()";
		Matcher m = 
			Pattern.compile(regex_operator).matcher(ts);
		while(m.find())
			m.appendReplacement(sbuf, " " +m.group() +" ");
		m.appendTail(sbuf);		
		String[] sts = sbuf.toString().trim().split("\\s+");
		return sts;
	}
	
	public static void main(String[] args) throws SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException  {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in),1);
		String s ;
		try {
			s = br.readLine();
			String ps = new String(s);
			String  r1 = Transfer.transfer(ps);
			
			System.out.println(r1);
			System.out.println(CalculateInfix.calculate(r1));
			
		}catch (IOException e) {
			System.err.print(e);
		}
	}
		
		
		
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -