Java 哈希表:包含键找不到现有键

Java HashTable: contains key can't find existing key

假设我有一个 dictionary.csv 文件:

"apple", "n.", "a red fruit"
"exercise", "n.", "sport"
"exercise", "v.", "play sport"

我已经读入类型 Hashtable>:

content = {"apple":[["n", "a red fruit"]], "exercise"=[["n.", "sport"],["v.", "play sport"]]}

然而,content.containsKey("apple") returns 错误。我尝试了 hashmap 和 concurrentHashMap,但效果不佳。

下面是我的字典代码 class。

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Hashtable;

public class Dictionary {

    private String filename;
    private Hashtable<String, ArrayList<ArrayList<String>>> content = new Hashtable<>();

    public Dictionary(String filename) throws FileNotFoundException {
        // set the file name
        this.filename = filename;
        // read dictionary file into content
        try (BufferedReader br = new BufferedReader((new FileReader(filename)))) {
            String line;
            // read every line
            while ((line = br.readLine()) != null){
                String[] values = line.split(",");
                assert(values.length == 3);

                // split word,
                String word = values[0].toLowerCase();
                ArrayList<String> meaning = new ArrayList<>();
                meaning.add(values[1]);
                meaning.add(values[2]);

                // add word and meaning to the content
                if (content.containsKey(word)){
                    ArrayList newMeanings = content.get(word);
                    newMeanings.add(meaning);
                    content.put(word, newMeanings);
                }
                else {
                    ArrayList<ArrayList<String>> meanings = new ArrayList<>();
                    meanings.add(meaning);
                    content.put(word, meanings);
                }

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void getMeaning(String rawWord){
        String word = rawWord.toLowerCase();

        if (content.containsKey(word)){
            ArrayList<ArrayList<String>> meanings = content.get(word);
            int numMeanings = meanings.size();

            for (int i = 0; i < numMeanings; i++){
                String[] meaningLst = (String[]) meanings.get(i).toArray();
                System.out.println("Meaning " + (i+1) + ": " + meaningLst[0] + ". " + meaningLst[1]);
            }
        }
        else {
            System.out.println("Word not found");
        }
    }
}


下面是我在 Main class 中的代码。

import java.io.FileNotFoundException;

public class Main {
    public static void main(String ars[]) throws FileNotFoundException {
        Dictionary dictionary = new Dictionary("dictionary.csv");
        dictionary.getMeaning("apple");
    }
}


我认为您插入的是 "apple" 作为键而不是 apple。删除双引号。 变化:

String word = values[0].toLowerCase();

收件人:

String word = values[0].toLowerCase();
word = word.substring(1, word.length()-1);

您好问题出在输入上,它应该是 content.containsKey("\"apple\"") 而不是 content.containsKey("apple") 或请删除 dictionary.csv 文件中的 "。