使用Hashmaps了解两个或更多键

时间:2015-04-29 03:15:24

标签: java

我遇到了一个hashmap问题。在我的hashmap方法中,我希望有两个或更多关键字作为关键字,反对拥有一个关键字。例如,我希望用户输入包含两个或更多关键字的句子,假设“教授名称”是关键字。例如

@IBInspectable

用户输入代码挂起的“教授姓名是什么”。但另一方面,如果

    String[] temp3 = { "instructor","teacher","mentor" };
    responses.put("professor name", temp3);

代码有效。所以我希望能够输入一个包含两个或更多关键词的句子。我会感激任何形式的帮助。

这是我的hashmap方法

  String[] temp3 = { "instructor","teacher","mentor" };
    responses.put("professor", temp3);

这是我的主要方法

  private static HashMap<String, String[]> populateSynonymMap() {

    String[] temp1 = { "instructor","teacher","mentor" };
    responses.put("professor name", temp1);
    String[] temp2 = { "amount of test","test load","quantity of test" };

    return responses;
}

假设ParseFile方法有效

2 个答案:

答案 0 :(得分:0)

使用类型HashMap<List<String>,String[]>HashMap<Set<String>,String[]>分别代表HashMap<String,String[]>订单执行且无关紧要的情况。

在第一种情况下,您的密钥属于List<String>类型,而在第二种情况下,它们属于Set<String>类型。

最佳做法是使用Collections.unmodifiable *方法包装所有键,然后再将它们用作键 - 如果在HashMap中修改它们,则程序的行为将是未定义的。

答案 1 :(得分:0)

我会使用String contains方法来检查多个单词。这将解决您检查单个单词(如“教授”)或多个单词(如“教授姓名是什么”)的问题。

    System.out.print("> ");
    input = scanner.nextLine().toLowerCase();

    for (Map.Entry<String, String[]> entry : synonymMap.entrySet()) {
        String key = entry.getKey();
        String[] value = entry.getValue();
        if (input.contains(key) || key.contains(input)) {
            System.out.println("Input found in database -> " +Arrays.asList(value));
            break;
        }
    }

现在这将使单词或多个单词起作用。但是,当以相同的顺序输入单词时,这可以工作。你可以随心所欲地制作它。

例如,你可以将它扩展为从集合中的句子中输入和输出的单词,然后找出有多少单词匹配等。我建议你使用一些不同的数据结构,这使得这个任务看起来很自然。您可以考虑通过单词和同义词关系来组织数据库,这样您就不必担心来自一个同义词列表的值具有其他同义词等的情况。并且查找可以仅基于单词。