0

文字列内の単語を検索しようとしています。ただし、ピリオドのため、1つの単語を認識できません。句読点を削除しようとしていますが、効果がないようです。ここで何かが足りませんか?これは私が使用しているコード行です:s.replaceAll( "([az] +)[?:!。、;] *"、 "$ 1");

String test = "This is a line about testing tests. Tests are used to examine stuff";
    String key = "tests";
    int counter = 0;


    String[] testArray = test.toLowerCase().split(" ");

    for(String s : testArray)
    {
        s.replaceAll("([a-z] +) [?:!.,;]*","$1");
        System.out.println(s);
        if(s.equals(key))
        {
            System.out.println(key + " FOUND");
            counter++;
        }
    }

    System.out.println(key + " has been found " + counter + " times.");
}

s = s.replaceAll( "\ W"、 "") ;を使用して、解決策を見つけることができました(理想的ではないかもしれませんが)。この問題を解決する方法についての皆さんのガイダンスに感謝します。

4

3 に答える 3

1

Strings不変です。replaceAllの結果を新しいものに割り当てる必要がありますString

s = s.replaceAll("([a-z] +)*[?:!.,;]*", "$1");
                           ^

また、正規表現では、単語と句読点の間にスペースが存在する必要があります。の場合tests.、これは正しくありません。これを説明するために、オプションの(0個以上の)文字を使用して正規表現を調整できます。

于 2013-03-25T15:55:09.027 に答える
1

分割操作で正規表現を利用することもできます。これを試して:

String[] testArray = test.toLowerCase().split("\\W+");

これはアポストロフィで分割されるため、特定の文字リストを使用して少し調整する必要がある場合があります。

于 2013-03-25T16:22:05.293 に答える
0

正規表現が期待どおりに機能していないようです。それ以降の期間があるものを見つけたい場合は、これが機能します

([a-z]*) [?(:!.,;)*]

「テスト」を返します。指定された文字列で実行されたとき。

また

[?(:!.,;)*]

句読点を指摘するだけで、それを置き換えることができます。

ただし、substring()関数を使用していない理由はわかりません。

于 2013-03-25T16:07:56.130 に答える