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