/**
 * 检查是否含有需要转译的单元
 */
/*
 * 粗略检查是否能够计算,判断的依据是指含有特定的字符 StringTokenizer 如果一段字符是 str = "AAA@bbb#ccc@ddd"
 * StringTokenizer(str, "#",false) Token出来的结果是 AAA@bbb 和 ccc@ddd
 * StringTokenizer(str, "@#",false) Token出来的结果是 AAA 和 bbb 和 ccc 和 ddd
 * 
 * 因为如果calc字符串中不含有除了列出来的以外的字符 那么所有字符都将作为分隔符,那么Token出来的结果就没有了
 * 所以这个地方判断的依据是countTokens == 0
 */
boolean isCalcable(String calc) {
StringTokenizer st = new StringTokenizer(calc, "+-*/()0123456789. ",
false);
if (st.countTokens() == 0)
return true;
return false;
}我自己用的

解决方案 »

  1.   

    想简单的也可以,写一个正则表达式,java里面有现成的能支持.估计两行代码就搞定了
      

  2.   

    如果搂住需要正则表达式的资料可以发EMail联系我,我手上有资料,很easy,也很实用.连javascript也支持
      

  3.   

    不建议用正则表达式,虽然代码看上去简单,也就两行,但是写起来可不简单,我原来写过perl,总被正则表达式搞得头疼,java对正则表达式的支持跟perl又有很大差别。一般需要实现这个功能的都要算出算式的结果,正则表达式一点忙都帮不上了,还是自己写字符串解析比较好,还可以用来计算结果。
      

  4.   

    两种选择
    1.数据结构中使用栈,多项式用逆波兰表达式表示,建议看看数据结构或编译原理
    2.使用证则表达式,csdn的blog中有很多介绍正则表达式的文章,可以看看