读取文本文件,然后计算字母频率,并从最高到最低列出它们

时间:2015-10-01 04:05:45

标签: java arrays io

我成功制作的软件逐字符地读取文本文件,将每个字母频率的计数存储在Int数组中,然后按字母顺序列出。我需要做一个降序格式。

我需要帮助的是如何将字符数与数组中的特定字符一起存储?

这是我当前输出的一个例子:

    Letter            Frequency
     A                   0 
     B                   1 
     C                   7 
     D                   0  
     E                   14 

...等

我需要做到这样的事情:

    Letter            Frequency
     E                   14 
     C                   7 
     B                   1 
     D                   0  
     A                   0

这是我迄今所做的事情:

System.out.println("Letter            Frequency");
while ((nextLetter = in.read())!= -1) { 
    current = ((char)nextLetter);  letter
    current = Character.toLowerCase (current);
    if (current >= 'a' && current <= 'z'){ 
      count [current- 'a']++;    
      total++; 
    }
    else{
      other ++;
    }
}
for (int ii=0; ii<26; ii++){
    System.out.printf ("%c                   %d \n", ii+ 'A', count [ii]);
}

2 个答案:

答案 0 :(得分:0)

是的,因为Alfabravo和Henry说我们可以在这里使用UnexpectedValueException in Response.php line 403: The Response content must be a string or object implementing __toString(), "object" given. 而逻辑是

  

如果再次将最大条目的计数设置为-1,则将其设置为-1   搜索最初的第二个值   最大的条目等等

以下是工作代码:(已测试)

Maps

答案 1 :(得分:0)

如果您想要排序列表,则不需要地图。创建一个合适的类并使用Collections.sort()。

class CharCount implements java.lang.Comparable<CharCount>{
    public int character;
    public int count;
    public CharCount(int a, int b){ character = a; count = b; }
    public String toString(){ return  "" + (char)character + ":" + count; }

    @Override
    public int compareTo(CharCount another) {
        return Integer.compare(count, another.count);
    }
};

List<CharCount> hist = new ArrayList<>();
String input = "Halleluja";
for (int i = 97; i < 123; i++) {
    hist.add(new CharCount(i, 0));
}
for (int i = 0; i < input.length(); i++) {
    int asc = (int)Character.toLowerCase(input.charAt(i));
    hist.get(asc - 97).count++;
}
Collections.sort(hist);
Collections.reverse(hist);
System.out.println("histogramm " + hist);