【发布时间】:2014-03-17 16:22:15
【问题描述】:
有谁知道如何对字符串进行排序,例如:afacfa 到 aaaffc? (频率降序) 我对编程很陌生,只能想出办法。
String word = (String)jTextField1.getText();
String indexes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int[] count = new int[indexes.length()];
for (int i = 0; i < word.length(); i++) {
int index = indexes.indexOf(word.charAt(i));
System.out.println( "" + i + count[2] ) ;
if (index < 0)
continue;
count[index]++;
}
for (int i = 0; i < count.length; i++) {
if (count[i] < 1)
continue;
jTextArea1.append(String.format("%s (%d) %s",indexes.charAt(i),count[i],
new String(new char[count[i]]).replace('\0', '*')));
【问题讨论】:
-
你的方法有正确的想法。我唯一的建议是考虑声明一个简短的类来保存有关角色的信息,例如
static class Frequency { char c; int count; }并将您的计数存储在这些数组中。让他们根据您的订购规则实现Comparable,您可以使用Arrays.sort()或Collections.sort()进行排序。然后,当您遍历已排序的集合时,由于对象存储了它们的字符,因此很容易创建输出字符串。 -
顺便说一句,我编辑了您的示例字符串,以便输出看起来也不按字母顺序排列。我认为这让我们所有人都感到困惑。