import java.util.*;import java.util.regex.Pattern;import java.util.regex.Matcher;import java.util.Collections;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;public class sb { public static void main(String[] args) { String exp = "1 + 2 * (9 - 5)"; SuffixExpression se = compile(exp); int result = se.execute(); System.out.println(exp + " = " + result + " " + (result == 1 + 2 * (9 - 5) ? "✓" : "✗")); } static SuffixExpression compile(String str){//过程 // TODO: String a = ""; ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript"); List<String> intlist = new ArrayList<String>(); //定义对象依次存放每一个字符 List<String> fuhaolist = new ArrayList<String>(); //定义对象依次存放每一个字符 Deque<String> d = new LinkedList<>(); for(int i=0;i<str.length();i++){ String ss = String.valueOf(str.charAt(i)); if(isNumeric(ss)){ intlist.add(ss); }else{ if(ss.equals("(")||ss.equals(")")||ss.equals(" ")){ continue; } fuhaolist.add(ss); } } Collections.reverse(fuhaolist); // 倒序排列 for(String i:intlist){ d.push(i); } for(String l:fuhaolist){ //- * + try{ String fp = d.pop(); String sp = d.pop(); String spf = null; if(Integer.valueOf(fp).intValue()<Integer.valueOf(sp).intValue()){ spf=String.format("%s %s %s",sp,l,fp); }else{ spf=String.format("%s %s %s",fp,l,sp); } d.push(String.valueOf((int)jse.eval(spf)));// System.out.println((int)jse.eval(spf)); }catch (Exception t) {} } //for(String lsd:d){System.out.println(d);} return new SuffixExpression(d); } public static boolean isNumeric(String str){ Pattern pattern = Pattern.compile("[0-9]*"); Matcher isNum = pattern.matcher(str); return isNum.matches(); }}class SuffixExpression { Deque<String> ds; public SuffixExpression(Deque<String> ds){ this.ds = ds; } int execute() {//结果 // TODO: return Integer.parseInt(ds.peek()); }}
不太明白这边class类,以及compile方法的定义区别,都是用来干什么的
Sign in to make a reply
Quand-vous-partez
不太明白这边class类,以及compile方法的定义区别,都是用来干什么的