用java统计书中信息

练习一:

 

 

 

原码:  

package HP;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;


public class Hp {

public static void main(String[] args) throws IOException {

File f=new File("Harry Potter and the Sorcerer's Stone.txt");
FileReader fr=new FileReader(f);

int len=(int)f.length();
char ch[]=new char[len];
fr.read(ch);
String txt=String.valueOf(ch);
String[]a=txt.split("[^a-zA-Z]+");
int n=a.length;
int []zimu=new int [52];
char[]zm=new char[52];
for(int i=0;i<52;i++)
{
zimu[i]=0;
if(i<26)
zm[i]=(char) ('A'+i);
else
zm[i]=(char) ('a'+i-26);
}
int zimulength=0;
for(int i=0;i<n;i++) {
zimulength=zimulength+a[i].length();
}
System.out.println(zimulength);

for(int i=0;i<n;i++)
{
for(int z=0;z<a[i].length();z++) {
for(int j=0;j<52;j++)
{
if(a[i].charAt(z)==zm[j])
{
zimu[j]++;
break;
}
}
}
}

int max=0;
char maxzm;
for(int j=0;j<51;j++) {

for(int i=0;i<51-j;i++) {
if(zimu[i]<zimu[i+1])
{
max=zimu[i];
zimu[i]=zimu[i+1];
zimu[i+1]=max;
maxzm=zm[i];
zm[i]=zm[i+1];
zm[i+1]=maxzm;
}

}

}
double z[]=new double[52];
for(int i=0;i<52;i++)
{
z[i]=(double)zimu[i]/zimulength;
System.out.println(zm[i]+" "+String.format("%.4f",z[i]));
}

}

}

 

结果截图:

 

 

分析:将文件中的单词分别存储到字符串组中,然后用两个for循环将所有的字母统计,然后根据每个字母的数量的多少进行排序.之后输出.

 

练习二:

 

 

 

代码:

package HD;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

import 片段.Harry;
import 片段.and;

public class Hd {
public static void main(String[] args) throws IOException {
//初始化file与filereader
File f=new File("Harry Potter and the Sorcerer's Stone.txt");
FileReader fr=new FileReader(f);

//len为文件的字符长度,ch[]中存有所有的字符
int len=(int)f.length();
char ch[]=new char[len];
fr.read(ch);

String txt=String.valueOf(ch);
String[]a=txt.split("[^a-zA-Z]+");
int n=a.length; //n为单词数
int nind=0,wind=0; //nind表示不同单词个数wind代表总的单词数
Object[][] b=new Object[n][2];
Scanner scan=new Scanner(System.in);
System.out.println("请输入要输出多少个单词");
int ni=scan.nextInt();

for(;wind<n;wind++){
int k=0; //用k标记单词是否已经出现
for(int i=0;i<nind;i++){
if(((String) b[i][0]).equalsIgnoreCase(a[wind])){
b[i][1]=(int)b[i][1]+1;
k=1;
break;
}
}
//单词未出现则在记录数组末尾记录此单词
if(k==0){
b[nind][0]=a[wind];
b[nind][1]=1;
nind++;
}
}

int ac;
Object[] c=new Object[2];
for(int i=0;i<nind-1;i++)
{
for(int j=0;j<nind-1-i;j++)
{
if((int)b[j][1]<(int)b[j+1][1])
{
c=b[j];
b[j]=b[j+1];
b[j+1]=c;
}
else if((int)b[j][1]==(int)b[j+1][1])
{
int f1=((String) b[j][0]).compareTo((String) b[j+1][0]);
if(f1>0)
{
c=b[j];
b[j]=b[j+1];
b[j+1]=c;
}
}
}


}

for(int i=0;i<ni;i++)
{
System.out.println(b[i][0]+" "+b[i][1]);
}

}
}

 

 结果截图:

 

 

练习三:

 

 

 代码:

package HD;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

import 片段.Harry;
import 片段.and;

public class Hd {
public static void main(String[] args) throws IOException {
//初始化file与filereader
File f=new File("Harry Potter and the Sorcerer's Stone.txt");
FileReader fr=new FileReader(f);

//len为文件的字符长度,ch[]中存有所有的字符
int len=(int)f.length();
char ch[]=new char[len];
fr.read(ch);

String txt=String.valueOf(ch);
String[]a=txt.split("[^a-zA-Z]+");
int n=a.length; //n为单词数
int nind=0,wind=0; //nind表示不同单词个数wind代表总的单词数
Object[][] b=new Object[n][2];
Scanner scan=new Scanner(System.in);

for(;wind<n;wind++){
int k=0; //用k标记单词是否已经出现
for(int i=0;i<nind;i++){
if(((String) b[i][0]).equalsIgnoreCase(a[wind])){
b[i][1]=(int)b[i][1]+1;
k=1;
break;
}
}
//单词未出现则在记录数组末尾记录此单词
if(k==0){
b[nind][0]=a[wind];
b[nind][1]=1;
nind++;
}
}

int ac;
Object[] c=new Object[2];
for(int i=0;i<nind-1;i++)
{
for(int j=0;j<nind-1-i;j++)
{
if((int)b[j][1]<(int)b[j+1][1])
{
c=b[j];
b[j]=b[j+1];
b[j+1]=c;
}
else if((int)b[j][1]==(int)b[j+1][1])
{
int f1=((String) b[j][0]).compareTo((String) b[j+1][0]);
if(f1>0)
{
c=b[j];
b[j]=b[j+1];
b[j+1]=c;
}
}
}


}

for(int i=0;i<nind;i++)
{
System.out.println(b[i][0]+" "+b[i][1]);
}

}
}

 

结果截图:

 

 

 

 

练习四:

 

 

package HD;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.Scanner;

public class Hd2 {
public static void main(String[] args) throws IOException {
String path = "D:\\add";
File f = new File(path);
Hd2.getFile(f);
}


public static void getFile(File file) throws IOException{
if(file != null){
File[] f = file.listFiles();
if(f != null){
for(int i=0;i<f.length;i++){
getFile(f[i]);
}

}else{
System.out.println("以下为"+file+"的统计");
Hd h1=new Hd();
h1.tongji(file);
}
}
}
}

 

结果截图:

 

 

hd2.java

 

package HD;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.Scanner;

public class Hd2 {
public static void main(String[] args) throws IOException {
String path = "D:\\add";
File f = new File(path);
Hd2.getFile(f);
}


public static void getFile(File file) throws IOException{
if(file != null){
File[] f = file.listFiles();
if(f != null){
for(int i=0;i<f.length;i++){
getFile(f[i]);
}

}else{
System.out.println("以下为"+file+"的统计");
Hd h1=new Hd();
h1.tongji(file);
}
}
}
}

 

hd.java

package HD;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

import 片段.Harry;
import 片段.and;

public class Hd {
public void tongji(File f2) throws IOException {
//初始化file与filereader
File f=new File(f2.toString());
FileReader fr=new FileReader(f);

//len为文件的字符长度,ch[]中存有所有的字符
int len=(int)f.length();
char ch[]=new char[len];
fr.read(ch);

String txt=String.valueOf(ch);
String[]a=txt.split("[^a-zA-Z]+");
int n=a.length; //n为单词数
int nind=0,wind=0; //nind表示不同单词个数wind代表总的单词数
Object[][] b=new Object[n][2];
System.out.println("请输入要输出的")
Scanner scan=new Scanner(System.in);
int n2=scan.nextInt();
for(;wind<n;wind++){
int k=0; //用k标记单词是否已经出现
for(int i=0;i<nind;i++){
if(((String) b[i][0]).equalsIgnoreCase(a[wind])){
b[i][1]=(int)b[i][1]+1;
k=1;
break;
}
}
//单词未出现则在记录数组末尾记录此单词
if(k==0){
b[nind][0]=a[wind];
b[nind][1]=1;
nind++;
}
}

int ac;
Object[] c=new Object[2];
for(int i=0;i<nind-1;i++)
{
for(int j=0;j<nind-1-i;j++)
{
if((int)b[j][1]<(int)b[j+1][1])
{
c=b[j];
b[j]=b[j+1];
b[j+1]=c;
}
else if((int)b[j][1]==(int)b[j+1][1])
{
int f1=((String) b[j][0]).compareTo((String) b[j+1][0]);
if(f1>0)
{
c=b[j];
b[j]=b[j+1];
b[j+1]=c;
}
}
}


}

for(int i=0;i<nind;i++)
{
System.out.println(b[i][0]+" "+b[i][1]);
}

}
}

 

结果截图:

 

 练习五:

 

源代码:

package HD;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.Scanner;

public class Hd2 {
public static void main(String[] args) throws IOException {
String path = "D:\\add";
File f = new File(path);
Hd2.getFile(f);
}


public static void getFile(File file) throws IOException{
if(file != null){
File[] f = file.listFiles();

if(f != null){
for(int i=0;i<f.length;i++){
getFile(f[i]);
}

}else{
System.out.println("以下为"+file+"的统计");
Hd h1=new Hd();
h1.tongji(file);
}
}
}
}

 

package HD;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

 

public class Hd {
public void tongji(File f2) throws IOException {
//初始化file与filereader
File f=new File(f2.toString());
FileReader fr=new FileReader(f);

//len为文件的字符长度,ch[]中存有所有的字符
int len=(int)f.length();
char ch[]=new char[len];
fr.read(ch);

String txt=String.valueOf(ch);
String[]a=txt.split("[^a-zA-Z]+");
int n=a.length; //n为单词数
int nind=0,wind=0; //nind表示不同单词个数wind代表总的单词数
Object[][] b=new Object[n][2];
System.out.println("请输入要输出的单词数目.");
Scanner scan=new Scanner(System.in);
int n2=scan.nextInt();
for(;wind<n;wind++){
int k=0; //用k标记单词是否已经出现
for(int i=0;i<nind;i++){
if(((String) b[i][0]).equalsIgnoreCase(a[wind])){
b[i][1]=(int)b[i][1]+1;
k=1;
break;
}
}
//单词未出现则在记录数组末尾记录此单词
if(k==0){
b[nind][0]=a[wind];
b[nind][1]=1;
nind++;
}
}

int ac;
Object[] c=new Object[2];
for(int i=0;i<nind-1;i++)
{
for(int j=0;j<nind-1-i;j++)
{
if((int)b[j][1]<(int)b[j+1][1])
{
c=b[j];
b[j]=b[j+1];
b[j+1]=c;
}
else if((int)b[j][1]==(int)b[j+1][1])
{
int f1=((String) b[j][0]).compareTo((String) b[j+1][0]);
if(f1>0)
{
c=b[j];
b[j]=b[j+1];
b[j+1]=c;
}
}
}


}

for(int i=0;i<n2;i++)
{
System.out.println(b[i][0]+" "+b[i][1]);
}

}
}

 

结果截图:

 

 

 

 

 

 

 

posted @ 2019-11-05 20:09  西西里啊  阅读(254)  评论(0编辑  收藏  举报