Java:基于正则表达式搜索HashMap键吗?
我正在使用HashMap构建同义词库来存储同义词。
我正在尝试根据正则表达式搜索单词:该方法将必须将字符串作为参数并返回结果数组。这是我的第一个方法:
public ArrayList<String> searchDefinition(String regex) { ArrayList<String> results = new ArrayList<String>();
Pattern p = Pattern.compile(regex);
Set<String> keys = thesaurus.keySet();
Iterator<String> ite = keys.iterator();
while (ite.hasNext()) {
String candidate = ite.next();
Matcher m = p.matcher(candidate);
System.out.println("Attempting to match: " + candidate + " to " + regex);
if (m.matches()) {
System.out.println("it matches");
results.add(candidate);
}
}
if (results.isEmpty()) {
return null;
}
else {
return results;
}
}
现在,这不符合我的预期(或者我使用的正则表达式不正确)。如果我在哈希图中具有以下键:
cat, car, chopper
然后打电话searchDefinition("c")
或searchDefinition("c*")
我得到null
。
- 我如何使这项工作按预期进行?
- 是否有比HashMap更好的数据结构来保留
graph
同义词库所需的类似数据?(仅出于好奇,对于此任务,我们被要求使用Java Collection Map)。 - 我在上面的代码中不适当地做了什么?
谢谢,丹
编辑:我已更正示例。即使我使用正确的大小写也不起作用。
回答:
您需要指定不区分大小写的Pattern.compile
(
"c",Pattern.CASE_INSENSITIVE
)
。要查找其中包含a的单词,c
您需要使用matcher.find()。Matcher.matches()尝试匹配整个字符串。
以上是 Java:基于正则表达式搜索HashMap键吗? 的全部内容, 来源链接: utcz.com/qa/414418.html