使用Buffered Reader从文本文件创建HashMap?

时间:2018-02-15 19:29:45

标签: java hashmap bufferedreader

我在编写一个方法时遇到问题,该方法给出一个参数,一个文件名,读取将包含单词的文件并使用该键作为第一个字母制作一个Hashmap,例如对于像apple这样的文件中的单词,'a'是键,值是'apple'。

我目前的代码:

public class WordStore {
HashMap<String, List<String>> map;
File filename;

public WordStore() {
     map = new HashMap<String, List<String>>();
}

public WordStore(File file) throws IOException {
    map = new HashMap<String, List<String>>();
    BufferedReader br = null;
    //k = "/Users/hon/eclipse-workspace/Assignment4/src/wordbank.txt"
    try{
        File filename = new File(k);
        FileReader fr = new FileReader(filename);
        br = new BufferedReader(fr);    
        while(br.readLine()!=" ") {
        String word ="";
        word = br.readLine();
        String key = ""+(word.charAt(0));
        map.put(key, word);
        }

    }
    catch(IOException e) {
        System.out.println("File not found exception caught!");
    }
    finally {
        if(br != null) {
            try {
                br.close();
            }
        catch(IOException e) {
            e.printStackTrace();
        }
        }
    }

}
public void put(String key, String word) {
    if(map.containsKey(key)) {
        (map.get(key)).add(word);
    }
    else {
    List<String> names = new ArrayList<>();
    names.add(word);
    map.put(key, names);
    }
}
}

我在构造函数WordStore(文件文件)中有一个错误,在map.put(key,word)中,它表示类型put(String, List<String>)中的方法HashMap<String, List<String>>不适用于参数(String ,String)。

我尝试重命名我的put方法,以便它使用我的方法而不是hashmap put方法,但这也不起作用。

2 个答案:

答案 0 :(得分:0)

您正在尝试将String值放在需要List的位置。这是因为您已调用map的正常put方法。请调用您自己的put方法,该方法已经处理了这些列表。

put(key, word);

此外,您从文件中读取的方式并不正确。首先,您要将字符串与!=进行比较,这是不正确的。然后,您每次循环调用readLine两次。循环的顶部应该是:

String word;
while( (word = br.readLine() ) != null) {

这会读取一行并将其与同一行中的null进行比较,以测试文件结尾。

答案 1 :(得分:0)

您创建了put方法,这没关系,但您没有调用它。 相反,您使用put的“原始”map方法。

因此,将map.put的第一个实例更改为put