私はStringTokenizerを使用して、String入力内の要素で2つのスタックを作成しようとしています。私はwhileループに埋め込まれた2つのifループを使用して、正しいタイプのトークンをそれぞれのスタックに移入しようとしています。私はタイプを決定する条件を実際に設定する方法に苦労しています。ここに私がこれまで持っているものがあります。Javaでトークンの種類を決定するにはどうすればよいですか?
答えて
まず、文字列に==を使用しないでください。代わりに.equals()を使用してください。
次の問題は、最初の条件で比較するトークンが2条件のものとは異なることです。 token.nextToken()
は、最初のトークンを返し、それをTokenizerから削除します。
最初の要素を格納する一時変数を作成することができます。あなたはそれを何かと比較するのにこれを使うことができます。あなたも一緒に通常のものを行うことができますので
Stack numbers = new Stack();
Stack operators = new Stack();
StringTokenizer token = new StringTokenizer(expr, delimiters, true);
while(token.hasMoreTokens()) {
String tmp = token.nextElement()
if(tmp.equals(...)){
}
if(tmp.equals(...){
}
}
okay私は、トークナイザは、コンパイラがそれが何であるかを考えて(すなわち、3を見ればintと仮定して)、型を作成したと考えました。あなたの答えをありがとう! –
答え
返されるトークンは、実際には文字列です。私はあなたの正確な要件が何であるか知らないが、このような何かが動作するはずです:すべての
List<String> operators = Arrays.asList("+", "-", "*", "/");
StringTokenizer token = ...;
while(token.hasMoreTokens()){
String next = token.nextElement();
if(operators.contains(next)){
//operator
}
else if(next.matches("\\d+")){
//number
}
else {
//error?
}
}
まずあなたが次のトークンのために使用して、変数を使用する必要があります、のnextElementは()もトークナイザからトークンが削除されますので、どこかに置かなければなりません。次に、文字列を比較して型を判別できます。ここでは、それが所定の演算子のリストであるかどうか、正規表現\d+
と一致するかどうかを確認します。それが数字かどうか。
廃止
StringTokenizer JavaDocは、それがString.splitの賛成で廃止されましたと言う:
StringTokenizerは、その使用は新しいコードでは推奨されて の理由が、互換性のために保持されているレガシークラスです。 この機能を求める人は、文字列 またはjava.util.regexパッケージのsplitメソッドを使用することをお勧めします。
このクラスを使用することをおすすめします。
これは、左から右に入力される数式を解決するためのアルゴリズムの一部です(通常の操作順序は無視されます)。あなたの返事をありがとう –
- 1. TabControlに追加されるアイテムの種類を特定するにはどうすればよいですか?
- 2. XMLでTextViewのテキストに2種類の色を設定するにはどうすればよいですか?
- 3. UIスレッドから特定の種類のタスクを実行するにはどうすればよいですか?
- 4. PrinterDialogの使用中に用紙の種類を設定するにはどうすればよいですか?
- 5. リアクティブJavaサブスクリプションはどのような種類のオブジェクトですか?
- 6. レコードオブジェクトの種類によってXmlSerializerの種類を定義するにはどうすればよいですか?この行に以下のコード、と
- 7. 特定の種類のカレンダーを作成するにはどうすればよいですか?
- 8. Excelの列の種類と書式を設定するにはどうすればよいですか?
- 9. オブジェクトの種類を特定するにはどうすればよいですか?
- 10. (Javascript)複数の種類のオブジェクトをすばやくコーディングするにはどうすればよいですか?
- 11. GitHub wikiで何らかの種類のコンテンツテーブルを作成するにはどうすればよいですか?
- 12. より上位の種類の継承を使用するにはどうすればよいですか?
- 13. Railsの移行でデータベースの種類を確認するにはどうすればよいですか?
- 14. レルム - 複数の種類のオブジェクトでフィードを作成するにはどうすればよいですか?
- 15. ハイブテーブルの色相で列の種類を変更するにはどうすればよいですか?
- 16. JJWTトークン。タイムアウトを設定するにはどうすればよいですか?
- 17. 形状ファイルの種類をポリラインからポリゴンに変換するにはどうすればよいですか?
- 18. Androidで2種類の並べ替えを追加するにはどうすればよいですか?
- 19. elasticsearchで2種類のクロス結合を達成するにはどうすればよいですか?
- 20. 関数内で2種類のパラメータを使用するにはどうすればよいですか?
- 21. Excelで凡例の種類を変更するにはどうすればよいですか?
- 22. エリクシール:これはどのような種類のリストですか?
- 23. これはどのような種類のデータモデルですか
- 24. これはどのような種類のUDPプロトコルですか?
- 25. これはどのような種類のオブジェクトですか?
- 26. Mongoidが生成するクエリの種類をテストするにはどうすればよいですか?
- 27. Sharepoint PeopleEditor:返されるユーザー/グループの種類を調べるにはどうすればよいですか?
- 28. 使用されるHTML5仕様の種類を知るにはどうすればよいですか?
- 29. カスタムアカウントの種類をAndroidの連絡先アプリに表示するにはどうすればよいですか?
- 30. UIImageViewサブクラスに「viewDidLoad」の種類のメソッドを追加するにはどうすればよいですか?
1. whileループ本体でtoken.nextElement()を複数回呼び出さないでください。 2. http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java –
を読み、 '=='を使って文字列を比較し、 '.equals(otherObject)'を代わりに使う –
あなたはこのサイトを初めて利用しているようですので、[このヘルプページ](http://stackoverflow.com/help/someone-answers)をご覧ください。基本的には、控えめな回答の隣にある緑色のチェックマークをクリックして、回答者に報酬を与えるようにあなたの質問を解決済みとマークする必要があります。 –