【发布时间】:2017-10-23 05:24:36
【问题描述】:
我的程序将一个字符串作为用户的输入。此方法特别返回字符串中的每个唯一字符及其重复次数。输出按 ASCII 顺序排序(最低 ASCII 值在前)。有没有办法根据每个字符出现的次数对这个列表进行排序(即最常见的字符在前,最不常见的字符在后)?此外,如果两个字符出现的次数相同,有没有办法让 ASCII 表中的第一个字符排在最前面?这是我正在尝试处理的代码。
public static void alphabeticalSort(String input)
{
int[] ascii = new int[256];
for (int i = 0; i < input.length(); i++) {
char current = input.charAt(i);
ascii[(int)current]++;
}
System.out.println(IntStream.range(0, ascii.length).filter(x -> ascii[x] > 0).mapToObj(x -> String.format("%s: freq %s", (char) x, ascii[x])).collect(Collectors.joining("\n")));
}
【问题讨论】:
-
你的第一个
IntStream没有任何作用。 -
你所要求的毫无意义。如果您对数组进行排序,您的角色将不复存在。你需要使用地图或其他东西。
-
FWIW,对数组进行排序非常简单:
Arrays.sort(ascii); -
这些角色将不复存在是什么意思?
-
如果你通过索引来识别字符,你不能打乱这些值并且仍然保留与它们字符的关系。试试看,你很快就会明白我的意思。