シノニムを格納するために 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
。
- これを期待どおりに機能させるにはどうすればよいですか?
graph
シソーラスが必要とするようなものを保持するための HashMap よりも優れたデータ構造はありますか? (好奇心のみ。この課題に関しては、Java Collection Map を使用するように求められています)。- 上記のコードで私が不適切に行っていることは他にありますか?
ありがとう、ダン
編集:例を修正しました。正しいケースを使用しても機能しません。