📄 transfer.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 + -