找《飘》 中最常用的N个单词。
1,题目:输出单个文件(《飘》 英文版)中的前 N 个最常出现的英语单词,并将结果输入到文本文件中。
2,设计思路:
1),按行依次读取文件并按空格,逗号,圆点为分割标志将单词分割存到数组中。
2),将数组去重存到另一个数组中。
3),将字符串类型和整型数组的下标一 一对应用循环算出每一个单词出现的次数存在整型数组中。
4),将字符串类型和整型数组的下标一 一对应,按单词出现的数目排序。
5),将前N个单词输出到文件中。
3,代码:
import java.io.File;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Dancitongji {
private static String str="";
private static Scanner sc=new Scanner(System.in);
private static BufferedReader cin=null;
private static String a[]=new String[1000000];
private static String c[]=new String[10000000];
private static int b[]=new int[1000000];
private static int length=0;
private static int length1=0;
private static int nn=0;
private static int j=0;
//private static Boolean false;
public static void cun() throws IOException {//将单词存到数组a
{ while(str!=null) {
int i=0;
str=str.toLowerCase(); //把大写改成小写
for(i=0;i<str.length();i++) {
if((str.charAt(i)>96&&str.charAt(i)<123)) {
a[j]=a[j]+str.charAt(i);
}
if(str.charAt(i)==' '||str.charAt(i)==','||str.charAt(i)=='.') {
if(!a[j].equals("")) {
j=j+1;
a[j]="";
}
}
}
str=cin.readLine();
}
length=j;
}
}
public static void show() {//显示
for(int k=0;k<nn;k++) {
System.out.println(c[k]+" "+b[k]);
}
}
public static void Sorting() {//排序
int t3=0;
int t2=0;
String sr="";
for(int i=0;i<length1-1;i++) {
t3=i;
for(int j=i+1;j<length1;j++) {
if(b[t3]<b[j]) {
t3=j;
}
}
if(t3!=i) {
t2=b[i];
b[i]=b[t3];
b[t3]=t2;
sr=c[i];
c[i]=c[t3];
c[t3]=sr;
}
}
}
public static void Statistics(){//去重
for(int k=0;k<length;k++) {
b[k]=0;
}
c[0]=a[0];
int tt=1;
Boolean rt=true;
for(int i=1;i<length;i++) {
rt=false;
for(int j=0;j<tt;j++) {
if(a[i].equals(c[j])) {
rt=true;
break;
}
}
if(!rt) {
c[tt]=a[i];
tt++;
}
}
length1=tt;
for(int i=0;i<length1;i++) {
for(int j=0;j<length;j++) {
if(c[i].equals(a[j])) {
b[i]++;
}
}
}
}
public static void Readfile() {
File file=new File("D:\JAVA\java 书\3.txt");
try {
InputStreamReader read = new InputStreamReader(new FileInputStream(file),"UTF-8");
cin=new BufferedReader(read);
str=cin.readLine();
cun();
cin.close();
read.close();
}
catch(IOException e) {
System.out.println("读取失败!");
e.printStackTrace();
}
}
public static void Writefile() throws IOException {
File file=new File("D:\JAVA\java 书\2.txt");
if(!file.exists())
file.createNewFile();
FileWriter write = new FileWriter(file,true);
BufferedWriter out=new BufferedWriter(write);
for(int i=0;i<nn;i++){
StringBuffer sb=new StringBuffer();
out.write("这是第"+(i+1)+"个: ");
out.write(c[i]+" "+b[i]);
out.write("
");
}
out.close();
}
public static void main(String[] args) throws IOException {
System.out.println("请输入您要统计前几个最常出现的单词:");
nn=sc.nextInt();
a[0]="";
Readfile();
Statistics();
Sorting();
show();
Writefile();
}
}
4,运行测试: