我是 Java 新手。我想在文本文件中搜索一个字符串。假设文件包含:
你好,我正在学习Java。
我正在使用下面的模式来搜索每个确切的单词。
Pattern p = Pattern.compile("\\b"+search string+"\\b", Pattern.CASE_INSENSITIVE);
它工作正常,但找不到“java”。如何找到这两种模式。即带有边界符号和“。” 在字符串的末尾。有人对我如何解决这个问题有任何想法吗?
您应该解析您的搜索字符串,以便将点更改.
为 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());
}
}
"\\b" + searchstring + "(?:\\.|\\b)"
如果您想规定点后面必须跟一个非单词字符或字符串的结尾,您可以添加一个肯定的前瞻
"\\b" + searchstring + "(?:\\.(?=\\W|$)|\\b)"
Pattern p = Pattern.compile(".*\\W*" + searchWord + "\\W*.*", Pattern.CASE_INSENSITIVE);
可以肯定的是,上面说“给我找一段以 0 个或多个字符开头的文本,后跟 0 个或多个非单词字符,特别是(\W* - 单词边界),然后是搜索词,然后是下一个单词边界,然后是其他任何内容”。
这将迎合搜索词位于文件开头、结尾或标点之间的情况,例如:“hi,I am learning,java.”。
希望这可以帮助...