Java HashMap输出问题

Java HashMap输出问题,java,hashmap,Java,Hashmap,我正在尝试使用HashMap来完成一个项目,在这个项目中,我读入一个混乱单词列表和一个实际字典单词文件,并使用HashMap来查找混乱单词文件中匹配的所有单词并将它们打印出来。问题是我无法让它打印单词的正确字典形式,只是一个规范版本(字母按字母顺序排列) 公共类混乱{ 公共静态void main(字符串[]args)引发异常 { 如果(参数长度

我正在尝试使用HashMap来完成一个项目,在这个项目中,我读入一个混乱单词列表和一个实际字典单词文件,并使用HashMap来查找混乱单词文件中匹配的所有单词并将它们打印出来。问题是我无法让它打印单词的正确字典形式,只是一个规范版本(字母按字母顺序排列)

公共类混乱{
公共静态void main(字符串[]args)引发异常
{
如果(参数长度<2)模具
BufferedReader dictionaryFile=新的BufferedReader(新的文件读取器(args[0]);
BufferedReader jumbleFile=新的BufferedReader(新文件读取器(args[1]);
HashMap=newHashMap();
ArrayList jumbleWords=新的ArrayList();
ArrayList DictionaryWord=新的ArrayList();
while(jumbleFile.ready())
{
String word=jumbleFile.readLine();
字符串canWord=toCanonical(word);
添加(单词);
put(canWord,newarraylist());
}
Collections.sort(jumbleWords);
while(dictionaryFile.ready())
{
String dictWord=dictionaryFile.readLine();
dictionaryWords.add(dictWord);
}
for(字符串字典词:字典词)
{
字符串canDictWord=toCanonical(字典词);
if(map.containsValue(candicWord))
{
arraylistlistofwords=map.get(canDictWord);
添加(字典单词);
}
}
ArrayList keysList=新的ArrayList(map.keySet());
Collections.sort(keysList);
for(字符串键:keysList)
{
系统输出打印(键);
ArrayList list=map.get(key);
集合。排序(列表);
for(字符串字:列表)
{
系统输出打印(“+”字);
}
System.out.println();
}
} 
专用静态无效模具(字符串errmsg)
{
System.out.println(“\n致命错误:+errmsg+”\n”);
系统出口(0);
}
私有静态字符串到规范(字符串字)
{
char[]字母=word.toCharArray();
数组。排序(字母);
返回新字符串(字母);
}
} 

您似乎混淆了键和值。代码首先将规范词作为键放在映射中,然后作为值列出。然后用字符串作为参数调用containsValue()。这将始终返回false。那么,将字典中的单词作为键放在地图中如何呢?您是否正在解译这些混乱的单词并确定它们是否在您的字典中?是的,然后将它们打印出来?您需要知道一个混乱的单词是否可以解译为多个单词吗?还是第一个找到了工作?例如,味觉可以解读为状态或乳头。
public class Jumbles {
    public static void main(String[] args) throws Exception
    {
        if (args.length < 2 ) die

        BufferedReader dictionaryFile = new BufferedReader( new FileReader( args[0] ));
        BufferedReader jumbleFile = new BufferedReader( new FileReader( args[1] ));

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

        while(jumbleFile.ready())
        {
            String word = jumbleFile.readLine();
            String canWord = toCanonical(word); 
            jumbleWords.add(word); 
            map.put(canWord, new ArrayList<String>()); 
        }
        Collections.sort(jumbleWords); 

        while(dictionaryFile.ready())
        {
            String dictWord = dictionaryFile.readLine(); 
            dictionaryWords.add(dictWord); 
        }
        for(String dictionaryWord : dictionaryWords)
        {
            String canDictWord = toCanonical(dictionaryWord); 
            if(map.containsValue(canDictWord))
            {
                ArrayList<String> listOfWords = map.get(canDictWord); 
                listOfWords.add(dictionaryWord);
            }
        }
        ArrayList<String> keysList = new ArrayList(map.keySet());
        Collections.sort(keysList);
        for(String key : keysList)
        {
            System.out.print(key); 

            ArrayList<String> list = map.get(key);
            Collections.sort(list);
            for(String word : list)
            {
                System.out.print(" " + word);   
            }
            System.out.println(); 
        }
    } 

    private static void die( String errmsg )
    {
        System.out.println( "\nFATAL ERROR: " + errmsg + "\n" );
        System.exit(0);
    }

    private static String toCanonical( String word )
    {
        char[] letters = word.toCharArray();
        Arrays.sort(letters);
        return new String(letters);
    }
}