1

初級/中級プログラマーのコンソールから入力を読み取るためにScannerクラスを使用する代わりの方法は何ですか?

私は昨日探し始めました、そしてグーグルは私を自然言語処理についてのいくつかの記事と自然言語処理ツールキットのいくつかのリストに連れて行ってくれました。私が見つけたリストはあまりよく注釈が付けられておらず、トピックは非常に速く、非常に進んでいました。

「+」などの区切り文字のカスタムリストを作成することについて疑問に思い始めたので、私は尋ねます。"-" | "*" | 「/」。これは、スキャナーを使用しては不可能のようです。

4

3 に答える 3

4

"+" | "-" | "*" | "/"。これは Scanner を使用して行うことはできないようです。

このようなことを達成しようとしていますか?

String text="Some text +with -delimiters *described /above";
Scanner in=new Scanner(text);
in.useDelimiter("\\+|\\-|\\*|/"); // +,-,* are metacharacters in regex
                                  // to escape its special meaning we need 
                                  // to use "\\" before each of them
int counter=0;
while(in.hasNext())
    System.out.println(counter++ +") "+ in.next());

出力

0) Some text 
1) with 
2) delimiters 
3) described 
4) above
于 2012-12-14T16:35:20.380 に答える
2

インタプリタを書いていて、渡された式を評価したいようです。

私の提案は、入力に対して字句解析を実行し、それをトークンに変換するFlexを調べることです。そして、そのトークン セットを取得し、式ツリーに解析するGnu Bisonを見てください。

Flex と Bison は、プログラム内に「ミニ コンパイラ」を効果的に作成し、それを使用して入力を解析しますが、これにより、スキャナを使用する場合よりもコンテキストに依存するものをより適切に処理できます。

TL;DR

フレックス: 文字列 -> トークン

バイソン: トークン -> 式ツリー

あなた: 式ツリー -> 魔法

于 2012-12-14T16:45:47.597 に答える
1

BufferedReaders と InputStreams でそれを行うことができます。

BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));

于 2012-12-14T16:26:22.273 に答える