java - 使用HashMap和List解析文本文件

标签 java list parsing hashmap

我有一个像这样的文本文件:

fruits bananna blackbery apple
vegetable carrot potato
cars toyota honda ww bmw

我需要我的 Java 程序接受一个像 vegetable 这样的字符串并显示一行中的下一个单词。在这种情况下,程序将显示 carrot potato

我有下面的代码:

public static void ParseWithHashMap(String wordGiven) throws IOException {

        HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
        ArrayList<String> lemmes = new ArrayList<String>();

        FileInputStream fin = null;
        InputStreamReader isr = null;
        BufferedReader br = null;

        try {
            fin = new FileInputStream("test.txt");
            isr = new InputStreamReader(fin, "UTF-8");
            br = new BufferedReader(isr);
            String line = br.readLine();

            while (line != null) {
                String[] toks = line.split("\\s+");

                for (int i = 1; i < toks.length; i++) {
                    lemmes.add(toks[i]);

                }
                map.put(toks[0], lemmes);
                line = br.readLine();

            }
        } finally {

        }

        System.out.println(map.get(wordGiven));
    }

问题是,当我键入 fruits 时,程序将显示文本文件中除每行的第一个单词之外的所有单词

bananna blackbery apple carrot potato toyota honda ww bmw

,我想显示我给出的单词后面的单词,在这种情况下是

bananna blackbery apple

我做错了什么?

最佳答案

您需要在 while 循环 while (line != null) { 中声明/定义您的 ArrayList

原因是一旦您开始将数据添加到此列表,它就会累积到您不想要的文件末尾。相反,您只希望它只保存当前行的值。

因此,

  while (line != null) {
       ArrayList<String> lemmes = new ArrayList<String>();
       ...

应该能让您得到想要的结果。

关于java - 使用HashMap和List解析文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21889469/

相关文章:

java - jSoup 从 <td><span> 类获取文本

c - 如何在支持空字段的同时使用 sscanf 解析逗号分隔字符串中的字段?

java - 为 JTable 指定列特定的 TableCellRenderer

list - Common Lisp - 编写检测循环列表的函数

python - 如何有条件地创建列表?

c# - 根据另一个列表<>排序

java - 代号一个应用程序不适合 Windows 构建

java - 使用标准 Java 库获取 Writer 的 InputStream

java - 我的位图在缩放后在 Android 中旋转

java - 如何在另一个方法中调用onReceive方法?