2012-03-04 13 views
1

トークンのArrayListに、通常、中置式を変換し私はのようなものを変換したい

233 + 4 *(4-8)+5 [233へ

、+、4、*、(、4 、 - 、8、)、+、5]

ここで、後者はストリングの配列です。

これまでのところ私が持っている:

String s = "233 + 4 *(4-8) +5"; 
for(int i = 0; i<s.length(); i++) 
    { 
     int j = i + 1; 
     String sub = s.substring(i,j); 
     String checkdigit = s.substring(i,j); 
     while(checkdigit.matches("\\d|\\.") && j<s.length()) 
     { 
      checkdigit = s.substring(j,j+1); 
      j++; 
     } 
     System.out.print(sub); 
     if(!sub.equals(" ")) expression.add(sub); 
    } 

しかし、私はnullポインタ例外を取得しています。誰かがこれを訂正するのを助けることができる?

誰かがこれを解析してマイナスの値(-5など)を受け入れるように助けてくれれば助かります。

編集: ところで。

編集2(5.0など)ダブルスのためのものです:誰もが自分のコードを置き換えることができます任意のJava APIクラスを知っている場合

、私は彼らと私のコードを置き換えることができるかを示してください。

答えて

0

算術式の解析は、はるかに複雑です(たとえば、マイナス記号とマイナス記号を区別することは困難です)。

独自のパーサを書くことができますが、私はそれにご希望の文法を提供することで、一般的なパーサ(例えばANTLRまたはJavaCC)を使用するか、単純な算術固有のライブラリ(例えばJEPまたはいくつかのオープンを探しすることをお勧めいたしますソース等価物)。パース複素数演算のほとんどのために働き、あなたの条件に最適ですorg.nfunk.jep.JEP http://www.antlr.org/wiki/display/ANTLR3/Five+minute+introduction+to+ANTLR+3

0

:ここ

あなたは、算術式を解析するためにANTLRを使用するのに役立ちリンクです。その使用のために最新のjar(3.x.x私は信じている)をダウンロードしていることを確認してください。 2.xは明白な機能のいくつかをサポートしていません!

関連する問題