2015-11-17 2 views
2

Код ниже подсчитывает, сколько раз слова и буквы появлялись в строке. Как сортировать вывод с самого высокого на самый низкий? Вывод должен быть, как:Сортировка слов и букв в Java

the - 2 
quick - 1 
brown - 1 
fox - 1 
t - 2 
h - 2 
e - 2 
b - 1 

Мой код:

import java.util.HashMap; 
import java.util.Map; 
import java.util.StringTokenizer; 

public class Tokenizer { 
    public static void main(String[] args) { 
     int index = 0; 
     int tokenCount; 
     int i = 0; 
     Map<String, Integer> wordCount = new HashMap<String, Integer>(); 
     Map<Integer, Integer> letterCount = new HashMap<Integer, Integer>(); 
     String message = "The Quick brown fox the"; 

     StringTokenizer string = new StringTokenizer(message); 

     tokenCount = string.countTokens(); 
     System.out.println("Number of tokens = " + tokenCount); 
     while (string.hasMoreTokens()) { 
      String word = string.nextToken().toLowerCase(); 
      Integer count = wordCount.get(word); 
      Integer lettercount = letterCount.get(word); 

      if (count == null) { 
       // this means the word was encountered the first time 
       wordCount.put(word, 1); 
      } else { 
       // word was already encountered we need to increment the count 
       wordCount.put(word, count + 1); 
      } 
     } 
     for (String words : wordCount.keySet()) { 
      System.out.println("Word : " + words + " has count :" + wordCount.get(words)); 
     } 
     for (i = 0; i < message.length(); i++) { 
      char c = message.charAt(i); 
      if (c != ' ') { 
       int value = letterCount.getOrDefault((int) c, 0); 
       letterCount.put((int) c, value + 1); 
      } 
     } 

     for (int key : letterCount.keySet()) { 
      System.out.println((char) key + ": " + letterCount.get(key)); 
     } 
    } 
} 

ответ

1

У вас есть Map<String, Integer>; Я бы предложил что-то по строкам другого LinkedHashMap<String, Integer>, которое заполняется вводом ключей, отсортированных по значению.

1

Кажется, что вы хотите отсортировать карту по ее значению (т. Е. Считать). Вот некоторые general solutions.

Специально для Вашего случая, простое решение может быть:

  1. Используйте TreeSet<Integer>, чтобы сохранить все возможные значения отсчетов в HashMap.

  2. Итерация TreeSet от высокой к низкой.

  3. Внутри итерации, упомянутой в 2., используйте цикл для вывода всех пар слов-слов с подсчетом, равным текущему итерированному счету.

См., Возможно, это поможет.

1

просто используйте концепцию списка и добавьте все свои данные в список, а затем используйте метод сортировки для него

+1

Это не достойный ответ. Пожалуйста, найдите время, чтобы объяснить OP, как они должны это подробно подойти. Всегда полезно написать код, который демонстрирует ваш ответ. – APC

Смежные вопросы