0

テキストファイルからトークンとしてテキストを抽出できるようにしたい-たとえば、次の文を含むテキストファイルがあるとします。

いいレストランです、

私を信じてください!

この内容を「トークン」として抽出したいと思います。たとえば、1つのトークンは「It's」、次のトークンは「」、その後のトークンは「a」、「」、「good」のようになります。 、次に「レストラン」、次に「、」、「\ n」、次に「信じる」、「」、「私」、「!」。つまり、トークンは単語であるか単語ではないかのどちらかであるということです。

これが私がこれまでに持っているものです(トークンが単語であるかどうかをプログラムの他の場所で確認します。このメソッドは次のトークンを返すだけです):

public Token next() {
  if (c == -1) {
        throw new NoSuchElementException();
    }

  Writer sw=new CharArrayWriter();
  try {
        while ( c != -1 && Character.isLetter(c) ) {
            sw.write(c);
            c = r.read();
        }
        while ( c != -1 && !Character.isLetter(c)) {
            c = r.read();
        }
    } catch (IOException e) {
        c = -1;
        return null;
    }
    return null;
} 

現在、ライターを使用してトークンとしてエクスポートする方法がわからないため、戻り値は「null」になっています。誰かがこれについて何かヒントがありますか?ありがとうございました!

4

2 に答える 2

1

ニーズに合う可能性のあるScannerクラスを見てください。

http://docs.oracle.com/javase/6/docs/api/java/util/Scanner.html

ファイルからスキャナーを作成する場合は、このnext()メソッドを使用してトークンを取得できます。

于 2012-04-09T18:59:13.080 に答える
1

Matcherクラスを使用したソリューションで問題を解決できると思います。

Matcher m = Pattern.compile("\\p{Alpha}+|\\p{Digit}+|\\p{Punct}+|\\p{Space}+").matcher("It's a good restaurant, believe me!");
while(m.find())
    System.out.println(">"+m.group()+"<");

この正規表現は正しいものではないかもしれませんが、より良い正規表現を作成することはできます。次のパターンのドキュメントを参照してください。

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

于 2012-04-09T19:07:19.203 に答える