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

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

然后用户输入“教授名是什么”,代码就挂了。但另一方面,如果
  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;
}

这是我的主要方法
    public static void main(String args[]) throws ParseException, IOException {
    /* Initialization */
    HashMap<String, String[]> synonymMap = new HashMap<String, String[]>();
    synonymMap = populateSynonymMap(); // populate the map


    Scanner scanner = new Scanner(System.in);
    String input = null;
   /*End Initialization*/
    System.out.println("Welcome To DataBase ");
    System.out.println("What would you like to know?");

    System.out.print("> ");
    input = scanner.nextLine().toLowerCase();
    String[] inputs = input.split(" ");
      for (String ing : inputs) { // iterate over each word of the sentence.
        boolean found = false;
        for (Map.Entry<String, String[]> entry : synonymMap.entrySet()) {
            String key = entry.getKey();
            String[] value = entry.getValue();
            if (key.equals(ing) || Arrays.asList(value).contains(ing)) {

                found = true;
                parseFile(entry.getKey());``
            }
          break;
     }
                if (found) {
            break;
        }


    }
}

假设ParseFile方法有效

最佳答案

我会使用 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;
        }
    }

现在这将使它适用于单个单词或多个单词。但是当以相同的顺序输入单词时,这会起作用。你可以把它做得像你喜欢的那样精致。

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

关于java - 了解Hashmaps的两个或更多键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29933692/

10-12 13:38