Используя Java 8, вы можете легко решить эту проблему с помощью stream
и groupingBy
следующим образом:
import static java.util.stream.Collectors.*;
Scanner scan = new Scanner(System.in);
System.out.print("Enter a String : ");
String str =scan.nextLine();
String ret = str.chars().mapToObj(c -> (char) c).collect(groupingBy(c -> c, counting()))
.entrySet().stream()
.sorted(Comparator.comparing(Map.Entry::getValue))
.map(entry -> entry.getKey() + ": " + entry.getValue())
.collect(joining(", "));
System.out.println(ret);
Вот демо (вход и выход):
Enter a String : scan.nextLine();
a: 1, c: 1, s: 1, t: 1, (: 1, x: 1, ): 1, i: 1, ;: 1, L: 1, .: 1, e: 2, n: 3