5

私はJavaが初めてです。テキストファイル内の文字列を検索したい。ファイルに次のものが含まれているとします。

こんにちは、私は Java を学んでいます。

以下のパターンを使用して、すべての正確な単語を検索しています。

Pattern p = Pattern.compile("\\b"+search string+"\\b", Pattern.CASE_INSENSITIVE);

正常に動作しますが、「java.」が見つかりません。両方のパターンを見つける方法。つまり、境界記号と「.」を使用します。文字列の最後に。この問題を解決する方法について誰かアイデアがありますか?

4

3 に答える 3

4

ドットを RegEx dot:に変更するには、検索文字列を解析する必要があります。単一のドットは正規表現のメタ文字であり、任意の文字を意味することに注意してください。たとえば、文字列のすべてのドットを次のように置き換えることができます.\\.\\.

そのすべての仕事をしたくない場合は、検索文字列java\\.として送信してください

より詳しい情報:

コード例:

public static void main(String[] args) {
    String fileContent = "Hi i am learning java.";
    String searchString = "java";
    Pattern p = Pattern.compile(searchString);
    Matcher m = p.matcher(fileContent );
    while(m.find()) {
        System.out.println(m.start() + " " + m.group());
    }
}

次のように出力されます。17 java

public static void main(String[] args) {
    String fileContent = "Hi i am learning java.";
    String searchString = "java\\.";
    Pattern p = Pattern.compile(searchString);
    Matcher m = p.matcher(fileContent );
    while(m.find()) {
        System.out.println(m.start() + " " + m.group());
    }
}

次のように出力されます: 17 java.(最後のドットに注意してください)

編集:非常に基本的な解決策として、唯一の問題はドットであるため、文字列内のすべてのドットを次のように置き換えることができます\\.

public static void main(String[] args) {
    String fileContent = "Hi i am learning java.";
    String searchString = "java.";
    //this will do the trick even if the "searchString" doesn't contain a dot inside
    searchString = searchString.replaceAll("\\.", "\\.");
    Pattern p = Pattern.compile(searchString);
    Matcher m = p.matcher(fileContent );
    while(m.find()) {
        System.out.println(m.start() + " " + m.group());
    }
}
于 2013-02-19T22:01:33.077 に答える
0
Pattern p = Pattern.compile(".*\\W*" + searchWord + "\\W*.*", Pattern.CASE_INSENSITIVE);

確実に言うと、上記は「0 個以上の文字で始まり、その後に 0 個以上の非単語文字 (\W* - 単語境界) が続き、その後に検索単語が続き、その後に次の単語境界の後に何かが続きます。」

これは、検索語がファイルの先頭、最後、または句読点の間にある場合に対応します。

お役に立てれば...

于 2013-02-20T12:22:56.253 に答える
0
"\\b" + searchstring + "(?:\\.|\\b)"

ドットの後に単語以外の文字または文字列の終わりが続く必要があることを規定したい場合は、肯定的な先読みを追加できます

"\\b" + searchstring + "(?:\\.(?=\\W|$)|\\b)"
于 2013-02-20T00:10:56.097 に答える