2017-04-06 4 views
-1

単語のファイルを文字列配列に変換しました。私は何とかArrayを単語長のリストに変換して検索可能にする必要があります。言い換えれば、私は単語の長さ(例えば5)を入力し、単語の長さが5である単語だけを提示できる必要があります。助けて?単語の辞書:単語の長さごとに各要素をスキャンして検索可能にする必要があります

public static void main(String[] args) throws IOException {  
    String token1 = ""; 
    Scanner scan = new Scanner(new File("No.txt")); 
    List<String> temps = new ArrayList<String>(); 
    while (scan.hasNext()){ 
      token1 = scan.next(); 
      temps.add(token1); 
    } 
    scan.close(); 
    String[] tempsArray = temps.toArray(new String[0]); 
    for (String s : tempsArray) { 
+0

ループ、長さを比較しますか? – tnw

+1

[Google Guavaのマルチマップ](https://github.com/google/guava/wiki/NewCollectionTypesExplained#multimap)をご覧ください。 'Multimap 'を使って単語を長さで集めることができます。 – Thomas

+0

私の答えに関するコメント/フィードバック?助けてくれますか?あなたに受け入れられるように何かを加えることができますか? – GhostCat

答えて

4

あなたは配列を使用しません。あなたが必要とするのはコレクション、より正確にはMapsListsです。 Map<Integer, List<String>>を使用します。

意味:キーとして「語長」を使用するマップ。マッピングされたエントリは、その長さを持つすべての単語を含むリストです。

Map<Integer, List<String>> wordsByLength = new HashMap<>(); 
// now you have to fill that map; lets assume tempsArray contains all your words 
for (String s : tempsArray) { 
    List<String> listForCurrentLength = wordsByLength.get(s.length()); 
    if (listForCurrentLength == null) { 
    listForCurrentLength = new ArrayList<>(); 
    } 
    listForCurrentLength.add(s); 
    wordsByLength.put(s.length(), listForCurrentLength); 

基本的な考え方は基本的には既に持っている配列を繰り返すことです。そこにある各文字列について、それをそのマップに入れます。その長さに応じて。

(上記はちょうどダウン書かれていた。コンパイルもなく、テストどちらも、あなたが軌道に乗るために、「擬似コード」として意味する言ったように)配列による

関連する問題