2016-10-11 47 views
0

這是我讀取兩個文件的代碼,一個是文字,另一個是亂碼。該程序讀取和匹配文件中的文字加密的字母。它可以工作,但我希望輸出按字母順序排列。我的代碼中的哪些地方可以放入?按字母排序HashMap程序的輸出

import java.io.*; 
import java.util.*; 

public class Tester 
{ 
public static void main(String args[]) throws Exception 
{ 
    BufferedReader dictionary = new BufferedReader(new FileReader(args[0])); 
    BufferedReader jumbles = new BufferedReader(new FileReader(args[1])); 

    HashMap<String, List<String>> lookup = new HashMap<String, List<String>>(); 

    while(dictionary.ready()) 
    { 
     String word = dictionary.readLine(); 
     addWord(word, lookup); 
    }  
    dictionary.close(); 

    while(jumbles.ready()) 
    { 
     String jWord = jumbles.readLine(); 
     List<String>dWords= lookup.get(createKey(jWord)); 
     String wordsString = Arrays.toString(dWords.toArray()).replace("[", "").replace("]", "").replace(",", "").trim(); 


     if(dWords != null){ 
      System.out.println(jWord + " " + wordsString); 
     } 
    } 
    jumbles.close();  


} 


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

private static void addWord(String word, Map<String, List<String>> lookup) 
{ 
    String key = createKey(word); 
    List<String> list = lookup.get(key); 
    if(list == null) 
    { 
     list = new ArrayList<String>(); 
     lookup.put(key, list); 
    } 
    list.add(word); 
    } 
} 

輸出:

atc act cat tac otsp post pots stop spot tops opts gdo dog god atr rat tar art arpt trap tarp part grof frog sylogs glossy

我想要什麼:

arpt part tarp trap atc act cat tac atr art rat tar gdo dog god grof frog otsp opts post pots spot stop tops sylogs glossy

沒關係。

與固定它:

while(jumbles.ready()) 
    { 
     jSorted.add(jumbles.readLine()); 
    }  
    jumbles.close(); 

    Collections.sort(jSorted); 

    for(int i = 0; i < jSorted.size(); i++) 
    { 
     String jWord = jSorted.get(i); 
     List<String>dWords= lookup.get(createKey(jWord)); 
     String wordsString = Arrays.toString(dWords.toArray()).replace("[", "").replace("]", "").replace(",", "").trim(); 


     if(dWords != null){ 
      System.out.println(jWord + " " + wordsString); 
     } 
    } 
+1

使用TreeMap的,而不是HashMap中查收。 –

+1

它看起來像您的輸入文件不是按字母順序排列,但您希望按字母順序處理這些單詞。讀取文件並創建一個'ArrayList',然後對'ArrayList'進行排序,然後處理文件中的單詞。 – ajb

+0

@ CS_noob這不會幫助。這不是他想要排序的字典輸入。這個問題不是關於'HashMap',儘管標題。 – ajb

回答

0

您可以創建一個字符串列表,然後對它們進行排序

List<String> result = new ArrayList<>(); 
    while(jumbles.ready()) 
    { 
     String jWord = jumbles.readLine(); 
     List<String>dWords= lookup.get(createKey(jWord)); 
     String wordsString = Arrays.toString(dWords.toArray()).replace("[", "").replace("]", "").replace(",", "").trim(); 


     if(dWords != null){ 
      result.add(jWord + " " + wordsString); 
     } 
    } 
    jumbles.close(); 
    result.sort(String::compareTo); 
    result.forEach(System.out::println);