课堂测试,统计小说<飘>前N个最常出现的单词
思路:这道题设计文件知识,但自己还没有学到文件,所有自己在网上查了一些知识。
1、首先是将飘的英文原文放到文本文件中,一行一行读入。(因为不涉及大小写,所有用了toLowerCase()方法)
2、若有‘ ’,‘,’,‘。’等标点,则将之前的字符组成单词,并判断之前字符串数组是否有这个单词,若有则个数加1,没有则在字符串数组后新加,然后个数加1.直到读完。
3、给字符串数组和个数数组排序,按照选择排序;
4、在文本文件里输出前N个最常出现的单词
代码:
1 package com.javaclass2; 2 import java.io.File; 3 import java.io.InputStreamReader; 4 import java.util.Scanner; 5 import java.util.StringTokenizer; 6 import java.io.BufferedReader; 7 import java.io.BufferedWriter; 8 import java.io.FileInputStream; 9 import java.io.FileNotFoundException; 10 import java.io.FileReader; 11 import java.io.FileWriter; 12 public class TestText { 13 static int num=0,a=0; 14 static String word[]=new String[1000000]; 15 static int wordnum[]=new int[1000000]; 16 public static void main(String args[]) { 17 Scanner scanner = new Scanner(System.in); 18 System.out.println("请输入n(n为前n个最长出现的单词个数):"); 19 int n=scanner.nextInt(); 20 try{ 21 String path = "C:/Users/MACHENIKE/Desktop/飘英文版.txt"; 22 File file = new File(path); 23 InputStreamReader reader = new InputStreamReader(new FileInputStream(file)); 24 BufferedReader br = new BufferedReader(new FileReader(file)); 25 File file2 = new File("C:/Users/MACHENIKE/Desktop/飘.txt"); 26 file2.createNewFile(); 27 BufferedWriter out = new BufferedWriter(new FileWriter(file2)); 28 String s=""; 29 s=br.readLine(); 30 while(s!=null) { 31 s=s.toLowerCase();// 大写转小写 32 StringTokenizer st = new StringTokenizer(s," .,?;!\r\n:“”‘: "); 33 while(st.hasMoreElements()) { 34 String str =(String)st.nextElement(); 35 for(int j=0;j<num;j++) { 36 if(str.equals(word[j])) { 37 wordnum[j]++; 38 }else a++; 39 } 40 if(a==num) { 41 word[num]=str; 42 wordnum[num]++; 43 num++; 44 } 45 a=0; 46 } 47 s=br.readLine(); 48 } 49 for(int i=0;i<num;i++) { 50 for(int j=i+1;j<num;j++) { 51 if(wordnum[j]>wordnum[i]) { 52 int temp=wordnum[i]; 53 wordnum[i]=wordnum[j]; 54 wordnum[j]=temp; 55 String Temp=word[i]; 56 word[i]=word[j]; 57 word[j]=Temp; 58 } 59 } 60 } 61 for(int i=0;i<n;i++) { 62 System.out.println(word[i]); 63 } 64 for(int i=0;i<n;i++) { 65 out.write(i+":"+word[i]+" "); 66 out.flush(); 67 } 68 out.close(); 69 }catch(Exception e){ 70 e.printStackTrace(); 71 } 72 } 73 74 }
运行结果:
文件还有好多不懂,还有多练习多学习。
如果有错误或者更好的办法,请留言提出,感谢!!!