我正在建造一個使用HashMap來存儲同義詞的詞庫。Java:在基於正則表達式的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;
}
}
現在,這不工作,因爲我所期望的(或者我正在使用正則表達式不正確)。如果我在HashMap中的下列鍵:
cat, car, chopper
然後通過調用searchDefinition("c")
或searchDefinition("c*")
我得到null
。
- 如何按預期完成此項工作?
- 有沒有比HashMap更好的數據結構來保持像一個詞庫所需要的? (只有好奇心,因爲我們被要求使用Java Collection Map)。
- 還有什麼我在上面的代碼中做得不恰當嗎?
感謝, 丹
編輯:我已經糾正的例子。即使我使用正確的案例,它也不起作用。
克林特有答案。但請注意,使用「c *」調用find()將匹配_any_條目 - 因爲所有條目都有0個或多個c。小心你的正則表達式。 – 2009-05-18 21:10:58
尤其是因爲您將正則表達式直接傳遞給模式編譯器。你可以很容易地得到PatternSyntaxException。 – Clint 2009-05-18 21:17:10
不是這個問題,但是不要爲null返回null,並使用增強for循環。 – 2009-05-18 21:29:36