遍历英文文件
程序需求:编写程序对某个文件中的英文字符出现次数进行遍历,不区分大小写,在控制台按照字符出现次数的大小从大到小输出,如果字符出现次数相同,则按照字符Asall码大小比对输出:
程序具体实现如下:
package com.morning;
public class CharNum implements Comparable<CharNum>{
private int num = 1;
private char c;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public char getC() {
return c;
}
public void setC(char c) {
this.c = c;
}
@Override
public String toString() {
return c + "(" + num + ")";
}
@Override
public int compareTo(CharNum o) {
if(this.num==o.getNum()) {
return this.c-o.getC();
}else {
return this.num-o.getNum();
}
}
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
public class Test1 {
public static void main(String[] args) throws Exception {
File file = new File("aaa.txt");
CharNum[] arr = new CharNum[26];
if(file.exists()) {
try(Reader r = new BufferedReader(new FileReader(file));){
int kk = -1;
while((kk = r.read())!=-1) {
if((kk>='A' && kk<='Z') || (kk>='a' && kk<='z')) {
addChar(arr,(char)kk);
}
}
}
}
sort(arr);
for(CharNum cn:arr)
if(cn !=null)
System.out.print(cn + "\t");
}
private static void sort(CharNum[] arr) {
for(int k=1;k<arr.length;k++) {
for(int i=0;i<arr.length-k;i++) {
if(arr[i]!=null && arr[i+1]!=null) {
if(arr[i].compareTo(arr[i+1])<0) {
CharNum tmp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = tmp;
}
}
}
}
}
private static void addChar(CharNum[] arr, char kk) {
if(kk>='A' && kk<='Z') {
kk = (char)(kk-'A'+'a');
}
boolean exists = false;
int i = 0;
for(;i<arr.length;i++) {
if(arr[i]==null)
break;
if(kk==arr[i].getC()) {
arr[i].setNum(arr[i].getNum()+1);
exists = true;
break;
}
}
if(!exists) {
CharNum cn = new CharNum();
cn.setC(kk);
arr[i] = cn;
}
}
}