如何在Java中使用正则表达式找到带有点的单词?

Vij*_*and 5 java regex

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

嗨,我正在学习Java.

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

Pattern p = Pattern.compile("\\b"+search string+"\\b", Pattern.CASE_INSENSITIVE);
Run Code Online (Sandbox Code Playgroud)

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

Lui*_*oza 4

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

如果您不想完成所有这些工作,则只需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());
    }
}
Run Code Online (Sandbox Code Playgroud)

它会打印: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());
    }
}
Run Code Online (Sandbox Code Playgroud)

它将打印:(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());
    }
}
Run Code Online (Sandbox Code Playgroud)