将String的字符运算装成实际的逻辑运算会出错
import java.util.StringTokenizer;
import java.util.*;
public class TestStringTokenizer {
public static void main(String[]args){
String s = "1+5*6" ;
StringTokenizer stringTokenizer = new StringTokenizer(s ,"+-*/",true) ;
ArrayList <Character> array = new ArrayList<Character>() ;
ArrayList <Double> array1 = new ArrayList<Double>() ;
while( stringTokenizer.hasMoreTokens() ){
String token = stringTokenizer.nextToken() ;
if( token.length() == 0 )
continue ;
else if ( token.charAt(0) == '+' || token.charAt(0)=='-' ){
while( !array.isEmpty() &&(
array.get(array.size() - 1) == '+' ||
array.get(array.size() - 1) == '-' ||
array.get(array.size() - 1) == '*' ||
array.get(array.size() - 1) == '/' )){
count(array , array1) ;
}
array.add(token.charAt(0)) ;
}
else if ( token.charAt(0) == '*' || token.charAt(0) == '/' ) {
while( !array.isEmpty() && (
array.get(array.size() - 1) == '*' ||
array.get(array.size() - 1) == '/' )){
count(array , array1) ;
}
array.add(token.charAt(0)) ;
}
else
array1.add( Double.valueOf(token.charAt(0)) ) ;
}
p(array1.size()-1) ;
}
public static void count (ArrayList<Character> array , ArrayList<Double> array1){
if( !array.isEmpty() && !array1.isEmpty() ){
char c = array.remove( array.size() - 1 ) ;
double d1 = array1.remove( array1.size() -1 ) ;
double d2 = array1.remove( array1.size()-1 ) ;
if( c == '+' ){
array1.add(d1 + d2 ) ;
}
else if( c == '-' )
array1.add(d1 - d2 ) ;
else if( c == '*' )
array1.add(d1 * d2 ) ;
else
array1.add( d1 / d2 ) ;
}
}
public static void p(Object o){
System.out.println(o) ;
}
}