用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]);
}
}
}
结果截图: