关于TXT文件中英文单词出现频率排序问题
题目要求:
指定文件目录, 但是会递归遍历目录下的所有子目录,输出文件中所有不重复的单词,按照出现次数由多到少排列。
源码:
package word;
import java.io.File;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
import java.io.FileWriter;
public class Demo{
void getsize(File file)
{if(file.isFile())
{System.out.println(file.getName()+":");
int n=0;
int flag;
int m=0;
String word[]=new String[100000];
int sum[]=new int[100000];
String hang[]=new String[1000];
List<String> list;
String w;
int i=0;
try { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
import java.io.FileWriter;
public class Demo{
void getsize(File file)
{if(file.isFile())
{System.out.println(file.getName()+":");
int n=0;
int flag;
int m=0;
String word[]=new String[100000];
int sum[]=new int[100000];
String hang[]=new String[1000];
List<String> list;
String w;
int i=0;
try { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw
/* 读入TXT文件 */
//String pathname = "D:\\eclipse\\workspace\\most\\src\\word\\b.txt"; // 绝对路径或相对路径都可以,这里是绝对路径,写入文件时演示相对路径
//File filename = new File(pathname); // 要读取以上路径的input。txt文件
InputStreamReader reader = new InputStreamReader(
new FileInputStream(file));
BufferedReader br = new BufferedReader(reader);
String line = "";
line = br.readLine();
while (line != null) {
StringTokenizer st2 = new StringTokenizer(line, ",,., ,!,?,“,”,‘,-,'");
i=0;
while (st2.hasMoreElements()) {
hang[i]=String.valueOf(st2.nextElement());
hang[i]=hang[i].toLowerCase();
//String pathname = "D:\\eclipse\\workspace\\most\\src\\word\\b.txt"; // 绝对路径或相对路径都可以,这里是绝对路径,写入文件时演示相对路径
//File filename = new File(pathname); // 要读取以上路径的input。txt文件
InputStreamReader reader = new InputStreamReader(
new FileInputStream(file));
BufferedReader br = new BufferedReader(reader);
String line = "";
line = br.readLine();
while (line != null) {
StringTokenizer st2 = new StringTokenizer(line, ",,., ,!,?,“,”,‘,-,'");
i=0;
while (st2.hasMoreElements()) {
hang[i]=String.valueOf(st2.nextElement());
hang[i]=hang[i].toLowerCase();
m++;
list = Arrays.asList(word);
flag = list.indexOf(hang[i]);
if(flag==-1)
{
word[n]=hang[i];
sum[n]++;
n++;
}
else
{
sum[flag]++;
}
i++;
}
line = br.readLine(); // 一次读入一行数据
}
list = Arrays.asList(word);
flag = list.indexOf(hang[i]);
if(flag==-1)
{
word[n]=hang[i];
sum[n]++;
n++;
}
else
{
sum[flag]++;
}
i++;
}
line = br.readLine(); // 一次读入一行数据
}
} catch (Exception e) {
e.printStackTrace();
}
int ma=0;
int biao=0;
for(int j=0;j<n-1;j++)
{
ma=sum[j];
biao=j;
w=word[j];
for(int k=j+1;k<n;k++)
{
if(ma<sum[k])
{
ma=sum[k];
biao=k;
}
}
sum[biao]=sum[j];
sum[j]=ma;
word[j]=word[biao];
word[biao]=w;
}
for(int j=0;j<n;j++)
{
System.out.println(sum[j]);
System.out.println(word[j]);
}
}
else
{
File[] f1 = file.listFiles();
for(File x:f1)
{
getsize(x);
}
}
}
public static void main(String args[]) {
Demo t=new Demo();
t.getsize(new File("E:\\新建文件夹"));
}
}
e.printStackTrace();
}
int ma=0;
int biao=0;
for(int j=0;j<n-1;j++)
{
ma=sum[j];
biao=j;
w=word[j];
for(int k=j+1;k<n;k++)
{
if(ma<sum[k])
{
ma=sum[k];
biao=k;
}
}
sum[biao]=sum[j];
sum[j]=ma;
word[j]=word[biao];
word[biao]=w;
}
for(int j=0;j<n;j++)
{
System.out.println(sum[j]);
System.out.println(word[j]);
}
}
else
{
File[] f1 = file.listFiles();
for(File x:f1)
{
getsize(x);
}
}
}
public static void main(String args[]) {
Demo t=new Demo();
t.getsize(new File("E:\\新建文件夹"));
}
}