从 Java 中的文本文件中查找短语
Find phrases from a text file in Java
我的目标是阅读文本文件并找到要替换的某些词。然后它将替换单词并输出一个替换了单词的新文本文件。我的代码适用于单个单词,但如果我尝试用 space 替换短语,它就不起作用。我拥有的是一个 HashMap,其中包含我需要在文件中搜索的内容。
HashMap<String, Integer> hm = new HashMap<>();
hm.put("null",0);
hm.put("max",1);
hm.put("Do not repeat",2);
hm.put("names",3);
然后我遍历 HashMap,如果文件中包含该词,则用该词替换字符串。
for (String key : hm.keySet()) {
String check = key;
System.out.println(check);
text = text.toLowerCase(Locale.ROOT).replaceAll(check, "WRONG");
}
String new = text;
如果我在“不要重复”之类的词中有 space,这将不起作用。我怎样才能让它适用于短语而不仅仅是单个单词?它完全跳过短语并输出仅替换单个单词的新文件。
不是空格的问题,是D大写的问题
text.toLowerCase(Locale.ROOT)
将生成一个只包含小写字母的字符串,因此 "Do not repeat"
将不会在其中找到。
您可以通过传递 the appropriate flag:
使 replaceAll
不区分大小写
text = text.replaceAll("(?i)" + check, "WRONG");
请注意,您可能 运行 遇到与正在搜索的字符串中的元字符有关的问题。如果你可能包括一些东西,例如句点 (.
),你应该引用 check
:
text = text.replaceAll("(?i)" + Pattern.quote(check), "WRONG");
此外,由于您没有考虑单词边界,您可能 运行 进入 Scunthorpe problem。
我的目标是阅读文本文件并找到要替换的某些词。然后它将替换单词并输出一个替换了单词的新文本文件。我的代码适用于单个单词,但如果我尝试用 space 替换短语,它就不起作用。我拥有的是一个 HashMap,其中包含我需要在文件中搜索的内容。
HashMap<String, Integer> hm = new HashMap<>();
hm.put("null",0);
hm.put("max",1);
hm.put("Do not repeat",2);
hm.put("names",3);
然后我遍历 HashMap,如果文件中包含该词,则用该词替换字符串。
for (String key : hm.keySet()) {
String check = key;
System.out.println(check);
text = text.toLowerCase(Locale.ROOT).replaceAll(check, "WRONG");
}
String new = text;
如果我在“不要重复”之类的词中有 space,这将不起作用。我怎样才能让它适用于短语而不仅仅是单个单词?它完全跳过短语并输出仅替换单个单词的新文件。
不是空格的问题,是D大写的问题
text.toLowerCase(Locale.ROOT)
将生成一个只包含小写字母的字符串,因此 "Do not repeat"
将不会在其中找到。
您可以通过传递 the appropriate flag:
使replaceAll
不区分大小写
text = text.replaceAll("(?i)" + check, "WRONG");
请注意,您可能 运行 遇到与正在搜索的字符串中的元字符有关的问题。如果你可能包括一些东西,例如句点 (.
),你应该引用 check
:
text = text.replaceAll("(?i)" + Pattern.quote(check), "WRONG");
此外,由于您没有考虑单词边界,您可能 运行 进入 Scunthorpe problem。