要求1:输出某个英文文本文件中26字母出现的频率,由高到低排序,并显示字母出现的百分比,精确到小数点后两位。
思路:分别设存放字母和字母出现次数的数组,遍历文件内容,将字母及出现频率按由高到低的顺序输出
源码:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class word
{
static String str="";
static String str1="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
static char ch1 []=str1.toCharArray();//存放字母的数组
public static double num[]=new double[100];//存放字母出现次数的数组
public static int sum=0;//出现的字母个数
//读取文件内容
public static void read()
{
Scanner scan =new Scanner(System.in);
File file = new File("D:\\h\\halibote\\Harry Potter and the Sorcerer's Stone.txt");
int score = 0;
StringBuffer result = new StringBuffer();
try
{
FileReader r = new FileReader(file);
BufferedReader br = new BufferedReader(r);
int i=0;
str=br.readLine();
while(str!=null)
{
for(int j=0;j
{
for(int k=0;k
{
if(str.charAt(j)==str1.charAt(k))
{
sum++;
num[k]++;
}
}
}
str=br.readLine();
}
br.close();
for(int p=0;p
{
int o=p;
for(int q=p;q
{
if(num[o]
{
o=q;
}
}
if(o!=p)
{
char ff=ch1[o];
ch1[o]=ch1[p];
ch1[p]=ff;
double fff=num[o];
num[o]=num[p];
num[p]=fff;
}
}
for(int k=0;k
{
num[k]=num[k]/sum*100;
System.out.print(ch1[k]);
System.out.printf("%.2f",num[k]);
System.out.println("%");
}
}
catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args)
{
read();
}
}