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