- 论坛徽章:
- 0
|
猫小请进,一个有关stringtokenizer的难题.
搞定了
/*
* Created on 2004-12-10
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package TDD.tableur;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
/**
* @author 莫名其道
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Select {
private String in = "";
private String out= "";
private String tokenlast = "";
/**
* @param string
*/
public Select(String string) {
in = string;
// TODO Auto-generated constructor stub
}
/**
* @return
*/
public String select() {
// TODO Auto-generated method stub
StringTokenizer dev = new StringTokenizer(in.trim() , "/+* -()" , true);
out = parseE(dev);
return out;
}
String parseE(StringTokenizer se) {
String t = parseT(se);
try{ int ti = Integer.parseInt(t);}
catch(NumberFormatException e){
return "#Error";
}
if(t.equals("+" || t.equals(" " ){
return "#Error";
}
else{
String token = tokenlast ;
while (token.equals("+" ||token.equals("-" ) {
String t2 = parseT(se);
if(t2.equals("#Error" ||t2.equals(" " ||t2.equals("+" )
return "#Error";
else{
if (token.equals("+" ) {
t = cal(t,token,t2);
} else {
if(token.equals("-"))
t = cal(t,token,t2);
}
token = tokenlast;
}
}
return t;
}
}
String parseT(StringTokenizer st) {
String t = parseF(st);
String token = parseF(st);
tokenlast = token;
while (token.equals("*")||token.equals("/")) {
String t2 = parseF(st);
if(t2.equals("#Error"))
return "#Error";
else{
if (token.equals("*")) {
t = cal(t,token,t2);
} else {
if(token.equals("/"))
t = cal(t,token,t2);
}
token = parseF(st);
tokenlast = token;
}
}
return t;
}
String parseF(StringTokenizer sf) {
String token = "";
try{token = sf.nextToken();
if(token.equals(" "))
token = sf.nextToken();
} catch(NoSuchElementException e){
return "#Error";
}
while(token.equals("(") || token.equals(")")){
if (token.equals("(")) {
String t = parseE(sf);
token = tokenlast;
if(!token.equals(")"))
return "#Error";
return t;
} else {
return token;
}
}
return token;
}
/**
* @param t
* @param token
* @param t2
* @return
*/
private String cal(String t, String token, String t2) {
// TODO Auto-generated method stub
int n = Integer.parseInt(t);
int m = Integer.parseInt(t2);
if(token.equals("+"))
n = n + m;
else if(token.equals("-"))
n = n - m;
else if(token.equals("*"))
n = n * m;
else if(m!=0){
n = n / m;}
else {return "#Error";}
return n + "";
}
} |
|