質問

入力テキストの行から特定のものを照合する必要があります。行は次のようになります。

 to be/ Σ _ Σ  [1pos, 1neg] {0=1, 2=1}

テキストの各行を読み取るためにScannerクラスを使用しており、次のコードを記述しました。ただし、パターンが「to」であるため、何かが正常に機能していません。は、行に対して一致していません。は行に含まれています(行の「から」だけでなく、一致するものは何もありませんでした):

 Scanner scanner = new Scanner(file);
 while(scanner.hasNext()) {
      String line = scanner.nextLine();
      System.out.println("line: " + line);
      Pattern p_pos = Pattern.compile("to");
      Matcher m_pos = p_pos.matcher(line);
      String match = m_pos.group(0);
      System.out.println("match: " + match);
      boolean b_pos = m_pos.matches();
      if(b_pos) {
          System.out.println(match);
      }
 }

出力:

line:    to be/ Σ _ Σ  [1pos, 1neg] {0=1, 2=1}
Exception in thread "main" java.lang.IllegalStateException: No match found
    at java.util.regex.Matcher.group(Matcher.java:485)
    at lady.PhrasesFromFile.readFile(PhrasesFromFile.java:31)
    at lady.PhrasesFromFile.main(PhrasesFromFile.java:17)

もう1つ質問があります。どのように行を処理して、行の先頭から最初の" /"まですべてを保存できますか。シンボル? APIでそのためのメソッドが見つかりませんでした。そうすることは可能ですか?基本的に、行を連続して移動し、行の各部分を異なる変数に格納してから、これらの変数の値を使用します。最初の" /"の前にトークンの数がわからないのでシンボル、next()を特定の回数使用することはできません。

よろしくお願いします。

役に立ちましたか?

解決

.matches()は、全体入力文字列の照合を試みます。入力文字列の一部に一致させる場合は .find()を使用し、入力文字列の先頭に一致させる場合は .lookingAt()を使用します。

http:// java .sun.com / j2se / 1.4.2 / docs / api / java / util / regex / Matcher.html

また、パターンを拡張して一致するグループを含める場合(一致するグループの機能の詳細については、一般的な正規表現リファレンスを参照)、一致が成功した後に .group()関数を使用できますパターン内の特定のグループに一致する部分文字列を取得します。

他のヒント

次を使用して、トークンに必要な部分を抽出できます:

String tokenSection = Pattern.compile("(to\\s+.*?)/").matcher(line).find().group(1);

そしてそれをループしてトークンを抽出します

Pattern.compile("\\w+").matcher(tokenSection).find();

明らかに、上記のコードを直接プラグインすることはありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top