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

如何在Java中使用正则表达式查找带点的单词?,java,regex,Java,Regex,我是Java新手。我想在文本文件中搜索字符串。假设该文件包含: 嗨,我在学Java 我使用下面的模式来搜索每个精确的单词 Pattern p = Pattern.compile("\\b"+search string+"\\b", Pattern.CASE_INSENSITIVE); 它工作得很好,但找不到“java”。如何找到这两种模式。i、 带边界符号和字符串末尾带“.”的e。有人知道我如何解决这个问题吗?您应该解析搜索字符串,以便将点更改为正则表达式点:\.。请注意,and表示任何字符。

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

嗨,我在学Java

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

Pattern p = Pattern.compile("\\b"+search string+"\\b", Pattern.CASE_INSENSITIVE);
它工作得很好,但找不到“java”。如何找到这两种模式。i、 带边界符号和字符串末尾带“.”的e。有人知道我如何解决这个问题吗?

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

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());
    }
}
如果您不想做所有这些工作,那么只需将
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());
    }
}
它将打印:
17java

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());
    }
}
它将打印:
17java.
(注意最后的点)

编辑:作为一个非常基本的解决方案,因为你唯一的问题是点,你可以用
\\\。

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());
    }
}
如果您想规定点后面必须跟一个非单词字符或字符串的结尾,您可以添加一个正向前瞻

"\\b" + searchstring + "(?:\\.(?=\\W|$)|\\b)"
可以肯定的是,上面说“为我找到一段以0个或更多字符开头的文本,后跟0个或更多非单词字符(\W*-单词边界),后跟搜索词,后跟下一个单词边界,后跟任何其他字符”

这将满足搜索词位于文件开头、结尾或标点之间的情况,例如:“嗨,我在学习,java。”


希望这有帮助……

那么你是说如果你的搜索字符串是“Java”,你希望它找到“Java”吗?更多的澄清将帮助我们解决您的问题。我将我的评论转换为答案。如果您搜索的是文字字符串,那么只需使用正则表达式,只会增加复杂性。哦,天哪,这不是搜索“java”。仅此而已。文字可能会有所不同,输入文件也会有所不同。它可以是任何以period@VijayAnand这只是一个例子,并不是要说明如何实现解决方案。如果将“\\.”替换为相同的“\\.”@vijayan,它将变成
\\\\.
Pattern p = Pattern.compile(".*\\W*" + searchWord + "\\W*.*", Pattern.CASE_INSENSITIVE);