5

我是 Java 新手。我想在文本文件中搜索一个字符串。假设文件包含:

你好,我正在学习Java。

我正在使用下面的模式来搜索每个确切的单词。

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

它工作正常,但找不到“java”。如何找到这两种模式。即带有边界符号和“。” 在字符串的末尾。有人对我如何解决这个问题有任何想法吗?

4

3 回答 3

4

您应该解析您的搜索字符串,以便将点更改.为 RegEx 点:\\.。请注意,单个点是正则表达式中的元字符,表示任何字符。例如,您可以将字符串中的所有点替换为\\.

如果您不想做所有这些工作,那么只需发送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
"\\b" + searchstring + "(?:\\.|\\b)"

如果您想规定点后面必须跟一个非单词字符或字符串的结尾,您可以添加一个肯定的前瞻

"\\b" + searchstring + "(?:\\.(?=\\W|$)|\\b)"
于 2013-02-20T00:10:56.097 回答
0
Pattern p = Pattern.compile(".*\\W*" + searchWord + "\\W*.*", Pattern.CASE_INSENSITIVE);

可以肯定的是,上面说“给我找一段以 0 个或多个字符开头的文本,后跟 0 个或多个非单词字符,特别是(\W* - 单词边界),然后是搜索词,然后是下一个单词边界,然后是其他任何内容”。

这将迎合搜索词位于文件开头、结尾或标点之间的情况,例如:“hi,I am learning,java.”。

希望这可以帮助...

于 2013-02-20T12:22:56.253 回答