我正在使用ADFA-LD数据集进行基于主机的入侵检测项目,现在正在进行特征提取模块。 我构建了由长度为4的系统调用短语组成的短语词典。现在,为了进行特征提取,我需要将这些短语与新的系统调用轨迹进行比较(以下是一些示例): 。 我需要的是,如何将这些短语与新痕迹进行比较。 我在用J ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
目标是我正在阅读文本文件并找到要替换的某些单词。 然后它将替换单词并输出一个替换单词的新文本文件。 我的代码适用于单个单词,但如果我尝试用空格替换短语,则不起作用。 我拥有的是一个 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;
如果我在“不要重复”这样的词中有空格,这将不起作用。 我怎样才能让它适用于短语而不仅仅是单个单词? 它完全跳过短语并输出仅替换单个单词的新文件。
这与空格无关,而是因为大写的 D。
text.toLowerCase(Locale.ROOT)
将生成一个仅包含小写字母的字符串,因此在其中找不到"Do not repeat"
。
您可以通过传递适当的标志使replaceAll
不区分大小写:
text = text.replaceAll("(?i)" + check, "WRONG");
请注意,您可能会遇到正在搜索的字符串中的元字符问题。 如果您可能包含带有例如句点 ( .
) 的内容,您应该引用check
:
text = text.replaceAll("(?i)" + Pattern.quote(check), "WRONG");
此外,因为您没有考虑单词边界,所以您可能会遇到Scunthorpe 问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.