package shangke.dijiuzhou; import java.io.File; import java.io.InputStreamReader; import java.math.BigDecimal; 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 cin_txt { public static void main(String args[]) { int zongshu=0; int flag=1; int flag1=1; String hang; int length; int n; char biao; char word[]=new char[60]; int sum[]=new int[60]; int num=0; String sss="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; word=sss.toCharArray(); for(int i=0;i<52;i++) { System.out.println(word[i]); } System.out.println("*****************"); try { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw /* 读入TXT文件 */ String pathname = "H:\cin_text.txt"; // 绝对路径或相对路径都可以,这里是绝对路径,写入文件时演示相对路径 File filename = new File(pathname); // 要读取以上路径的input。txt文件 InputStreamReader reader = new InputStreamReader( new FileInputStream(filename)); BufferedReader br = new BufferedReader(reader); String line = ""; line = br.readLine(); while (line != null) { StringTokenizer st2 = new StringTokenizer(line, ",,., ,!,?,“,”,‘,-,'"); while (st2.hasMoreElements()) { hang=String.valueOf(st2.nextElement()); length=hang.length(); n=0; while(true) { biao=hang.charAt(n++); switch(biao) { case 'a' : sum[0]++;break; case 'b' : sum[1]++;break; case 'c' : sum[2]++;break; case 'd' : sum[3]++;break; case 'e' : sum[4]++;break; case 'f' : sum[5]++;break; case 'g' : sum[6]++;break; case 'h' : sum[7]++;break; case 'i' : sum[8]++;break; case 'j' : sum[9]++;break; case 'k' : sum[10]++;break; case 'l' : sum[11]++;break; case 'm' : sum[12]++;break; case 'n' :sum[13]++;break; case 'o' :sum[14]++;break; case 'p' :sum[15]++;break; case 'q' :sum[16]++;break; case 'r' :sum[17]++;break; case 's' :sum[18]++;break; case 't' :sum[19]++;break; case 'u' :sum[20]++;break; case 'v' :sum[21]++;break; case 'w' :sum[22]++;break; case 'x' :sum[23]++;break; case 'y' :sum[24]++;break; case 'z' :sum[25]++;break; case 'A' : sum[26]++;break; case 'B' : sum[27]++;break; case 'C' : sum[28]++;break; case 'D' : sum[29]++;break; case 'E' : sum[30]++;break; case 'F' : sum[31]++;break; case 'G' : sum[32]++;break; case 'H' : sum[33]++;break; case 'I' : sum[34]++;break; case 'J' : sum[35]++;break; case 'K' : sum[36]++;break; case 'L' : sum[37]++;break; case 'M' : sum[38]++;break; case 'N' :sum[39]++;break; case 'O' :sum[40]++;break; case 'P' :sum[41]++;break; case 'Q' :sum[42]++;break; case 'R' :sum[43]++;break; case 'S' :sum[44]++;break; case 'T' :sum[45]++;break; case 'U' :sum[46]++;break; case 'V' :sum[47]++;break; case 'W' :sum[48]++;break; case 'X' :sum[49]++;break; case 'Y' :sum[50]++;break; case 'Z' :sum[51]++;break; } zongshu++; length--; if(length<=0) { break; } } } // System.out.println(); //System.out.println("**********"); //System.out.println(line); line = br.readLine(); // 一次读入一行数据 } /* 写入Txt文件 */ /* File writename = new File("H:\wenben0.txt"); // 相对路径,如果没有则要建立一个新的output。txt文件 writename.createNewFile(); // 创建新文件 BufferedWriter out = new BufferedWriter(new FileWriter(writename)); out.write("我会写入文件啦 "); // 即为换行 out.flush(); // 把缓存区内容压入文件 out.close(); // 最后记得关闭文件 */ } catch (Exception e) { e.printStackTrace(); } int ma,b; char a; for(int i=0;i<51;i++) { ma=sum[i]; b=i; a=word[i]; for(int j=i+1;j<52;j++) { if(ma>=sum[j]) { ma=sum[j]; b=j; } } ma=sum[i]; sum[i]=sum[b]; sum[b]=ma; word[i]=word[b]; word[b]=a; } System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!"); for(int i=0;i<52;i++) { double what=(double)sum[i]/zongshu*100; BigDecimal bg=new BigDecimal(what); double f1=bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); System.out.println(word[i]+" "+f1+"%"); } System.out.println("%%%%%%%%%%%%%%%%%%%"); for(int i=51;i>=0;i--) { double what=(double)sum[i]/zongshu*100; BigDecimal bg=new BigDecimal(what); double f1=bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); System.out.println(word[i]+" "+f1+"%"); } } }
上面的代码是文件操作的文件导入操作,统计英文文本文件中的英文单字母所占总数的百分比
思路:开俩个数组和一个计数器。通过switch来统计各个字母的个数,在最后进行计算。
package shangke.disanzhou; import java.io.File; import java.io.InputStreamReader; import java.math.BigDecimal; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.util.Arrays; import java.util.List; import java.util.Scanner; import java.util.StringTokenizer; import java.io.FileWriter; public class cin_txt { public static void haha(String lujing) { 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 zongshu=0; int i=0; try { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw /* 读入TXT文件 */ String pathname = lujing; // 绝对路径或相对路径都可以,这里是绝对路径,写入文件时演示相对路径 File filename = new File(pathname); // 要读取以上路径的input。txt文件 InputStreamReader reader = new InputStreamReader( new FileInputStream(filename)); 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]=(String) st2.nextElement(); hang[i]=hang[i].toLowerCase(); //System.out.println("************"); m++; list = Arrays.asList(word); flag = list.indexOf(hang[i]); if(flag==-1) { word[n]=hang[i]; sum[n]++; n++; zongshu++; } else { sum[flag]++; zongshu++; } //System.out.print(hang[i]+" "); i++; } // System.out.println(); //System.out.println("**********"); //System.out.println(line); line = br.readLine(); // 一次读入一行数据 } /* 写入Txt文件 */ /* File writename = new File("H:\wenben0.txt"); // 相对路径,如果没有则要建立一个新的output。txt文件 writename.createNewFile(); // 创建新文件 BufferedWriter out = new BufferedWriter(new FileWriter(writename)); out.write("我会写入文件啦 "); // 即为换行 out.flush(); // 把缓存区内容压入文件 out.close(); // 最后记得关闭文件 */ } 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; } //System.out.println(m); // System.out.println(n); //System.out.println("***********"); /* for(int j=0;j<n;j++) { System.out.println(sum[j]); System.out.println(word[j]); }*/ System.out.println("请输入:"); Scanner shuru=new Scanner(System.in); int mmm; mmm=shuru.nextInt(); for(int j=0;j<mmm;j++) { double what=(double)sum[j]/zongshu*100; BigDecimal bg=new BigDecimal(what); double f1=bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); System.out.println(word[j]+" "+f1+"%"); } } public static void main(String args[]) { } }
上面这个代码是统计各个单词个数并将每个单词进行排序输出
主要的就是利用那个分隔符函数和List中的寻找下标的函数其他的都是一下基础的统计,但是这只是个被调用的函数,没有进行任何操作,如果想操作可以在main函数调用
package shangke.disanzhou; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class diaoyong { public int enen(String dao) { int length; int flag=1; Path path=Paths.get(dao); try { DirectoryStream<Path> children=Files.newDirectoryStream(path); for(Path child:children) { flag=1; String lujing; lujing=child.toString(); length=lujing.length(); if(length==0) { return 0; } char sta[]=new char[1000]; sta=lujing.toCharArray(); for(int i=0;i<length;i++) { if(sta[i]=='\') { sta[i]='/'; } if(sta[i]=='.') { flag=0; } } lujing=String.valueOf(sta); System.out.println(lujing); if(flag==1) { enen(lujing); } else { cin_txt.haha(lujing); System.out.println("*********************************"); } } } catch(Exception e) { } return 0; } public static void main(String[] args) { { diaoyong sta=new diaoyong(); sta.enen("H:/aaaa"); } } }
这个代码是对第二个代码的调用,这段代码通过递归的方式遍历文件夹,然后调用第二个代码对文本文件进行单词的统计