我是Java的新手。我想在文本文件中搜索一个字符串。假设文件包含:
嗨,我正在学习Java。
我正在使用以下模式来搜索每个确切的单词。
Pattern p = Pattern.compile("\\b"+search string+"\\b", Pattern.CASE_INSENSITIVE);
它工作正常,但没有找到“java”。如何找到这两种模式。即带边界符号和“。”在字符串的末尾。有没有人对如何解决这个问题有任何想法?
答案 0 :(得分:4)
您应该解析搜索字符串,以便将点.
更改为RegEx点:\\.
。请注意a single dot is a metacharacter in Regular Expressions并且表示任何字符。例如,您可以替换字符串中\\.
如果您不想完成所有工作,请发送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());
}
}
答案 1 :(得分:0)
"\\b" + searchstring + "(?:\\.|\\b)"
如果你想规定点必须后跟一个非单词字符或字符串的结尾,你可以添加一个正面的预测
"\\b" + searchstring + "(?:\\.(?=\\W|$)|\\b)"
答案 2 :(得分:0)
Pattern p = Pattern.compile(".*\\W*" + searchWord + "\\W*.*", Pattern.CASE_INSENSITIVE);
为了绝对肯定,上面说“找到一些以0或更多字符开头的文字,后面跟着0个或更多非字字符(\ W * - 字边界)后跟搜索字,然后是下一个单词边界,后跟其他任何“。
这将迎合搜索词位于文件开头,最后或标点符号之间的情况,例如:“嗨,我正在学习,java。”。
希望这会有所帮助......