Я создаю тезаурус, используя 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, чтобы сохранить
graph
как необходимый тезаурусу? (только любопытство, так как для этого задания нам предлагается использовать Java Collection Map). - Что-нибудь еще, что я делаю inapropriately в коде выше?
Спасибо, Dan
EDIT: Я исправил пример. Это не работает, даже если я использую правильный случай.