通过哈希映射进行基本迭代

时间:2015-04-28 05:48:13

标签: java

我在搜索文本文件中查找哈希映射中的元素并从文本文件返回一行文本时遇到问题。出于某种原因,我只能输入一个单词并搜索文件。我想输入一个句子而不是输入一个单词来搜索文件。例如,如果我的文本文件包含“教授是一位好女士”并且用户输入“导师怎么样”我想搜索“导师”的输入并输出句子“教授是一位好女士”。< / p>

其他信息

如果我输入一个句子,任何句子,程序就会挂起。但是,如果我只输入一个同义词,则搜索该文件并返回一个句子。我想输入一个句子并检查该句子的同义词

 public static void main(String args[]) throws ParseException, IOException {
    /* Initialization */
    HashMap<String, String[]> synonymMap = new HashMap<String, String[]>();
    synonymMap= populateSynonymMap(); //populate the map
    System.out.println("Welcome To DataBase ");
    System.out.println("What would you like to know?");

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

     for (Map.Entry<String, String[]> entry : synonymMap.entrySet()) {

            String[] value = entry.getValue();
            if (Arrays.asList(value).contains(input)) {

                parseFile(entry.getKey());


                System.out.println("Have a good day!");
                break;
            }
        }


}

这是我的哈希映射方法

    private static HashMap<String, String[]> populateSynonymMap() {
    responses.put("professor", new String[]{"instructor", "teacher", "mentor"});
    responses.put("book", new String[]{"script", "text", "portfolio"});
    responses.put("office", new String[]{"room", "post", "place"});
    responses.put("day", new String[]{"time",  "date"});
    responses.put("asssignment", new String[]{"homework", "current assignment "});
    responses.put("major", new String[]{"discipline", "focus"," study"});


    return responses;
}

这是解析文件方法

   public static void parseFile(String s) throws FileNotFoundException {
    File file = new File("data.txt");

    Scanner scanner = new Scanner(file);
    while (scanner.hasNextLine()) {
        final String lineFromFile = scanner.nextLine();
        if (lineFromFile.contains(s)) {
            // a match!
            System.out.println(lineFromFile);
            // break;
        }

    }
}

2 个答案:

答案 0 :(得分:0)

而不是与

比较
  

Arrays.asList(值)。载(输入)

方法,您可以定义您的方法,首先将输入句子拆分为单词,如果在hashmap中找到,则返回单词(String)。

然后您可以将返回String对象传递给您

  

parseFile

方法

答案 1 :(得分:0)

最后我纠正了这件事!问题在于input变量的比较。所以我所做的不是使用.containt()将字符串数组与输入进行比较,而是迭代了字符串value的数组并检查了input.contains(v),如下所示:

    for (Map.Entry<String, String[]> entry : synonymMap.entrySet()) {
        String[] value = entry.getValue();
        for(String v : value){
            if (input.contains(v)) {
                parseFile(entry.getKey());
                System.out.println("Have a good day!");
                break;
            }
        }
    }

我测试了它并发现它能正常工作。