- 论坛徽章:
- 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 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 StringTokenizer dev;
private String token = "";
/**
* @param string
*/
public Select(String string) {
in = string;
// TODO Auto-generated constructor stub
}
/**
* @return
*/
public String select() {
// TODO Auto-generated method stub
dev = new StringTokenizer(in , "/+*-()" , true);
while(dev.hasMoreTokens())
{
out = parseE(); output("out=",out);
}
return out;
}
/**
* @return
*/
private void output(String t, String t2) {
// TODO Auto-generated method stub
System.out.println(t + t2);
return;
}
String parseE() {
String t = parseT(); output("Et=",t);
token = parseT(); output("Etoken=",token);
while (token.equals("+" ||token.equals("-" ) {
String t2 = parseT();
if (token.equals("+" ) {
t = cal(t,token,t2); output("addt=",t);
} else {
if(token.equals("-" )
t = cal(t,token,t2); output("subt=",t);
}
token = getNext("+-" ; output("Etoken'=",token);
}
return t;
}
String parseT() {
String t = parseF(); output("Tt=",t);
// token = parseF(); output("Ttoken=",token);
while (token.equals("*" ||token.equals("/" ) {
String t2 = parseF(); output("t2=",t2);
if (token.equals("*" ) {
t = cal(t,token,t2); output("mult=",t);
} else {
if(token.equals("-" )
t = cal(t,token,t2); output("devt=",t);
}
token = parseF(); output("Ttoken'=",token);
} output("Tt'=",t);
return t;
}
String parseF() {
token = getNext("+*-/()" ; output("Ftoken-=",token);
while(token.equals("(") || token.equals(")")){
if (token.equals("(")) {
String t = parseE(); output("(t)=",t);
token = getNext("+/*-()"); output("t)=",token);
if(!token.equals(")"))
return "#Error";
return t;}
token = parseE();
return token;
} //else { output("Ftoken'=",token);
//return token;
//}
//}
return token;
}
/**
* @param string
* @return
*/
private String getNext(String as) {
// TODO Auto-generated method stub
String next;
try{next = dev.nextToken(as);}
catch(NoSuchElementException e)
{return "";
}
return next;
}
/**
* @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
n = n / m;
return n + "";
}
} |
|