统计单词频率
今天主要学习了部分文件输入输出的内容如下:
(1)类型.valueOf()是将括号中的参数转化为该类型(2)字节输入输出流:FileInputStream是InputStream的子类,是操作文件的字节输入流,BufferedInputStream是自带缓冲区的流,即内部含有一个大小为8192的字节数组,当用read()方法读入数据时,首先将读写的数据存入定义好的数组,然后一次性进行操作,与缓冲区类似,可以有效地提高数据的读入效率。输出与之相同。BufferedInputStream与FileInputStream还有一点不同,FileInputStream的构造方法是接受文件名或者file类型的参数作为被包装对象,而前者是接受后者类型的参数作为被包装对象。判断是否读取到文件末尾的方法:当FileInputStream或BufferedInputStream对象名.read()=-1时,表示已经读取到文件末尾。(3)JAVA中字符串比较equals()和equalsIgnoreCase()的区别:前者对字符串的比较需要区分大小写,而后者不区分。
对于今天的实验,有以下思路:
(1)首先读入文件,将所有的字符读入到一个字符数组中。
(2)将字符串数组单词字符串数组。
(3)对字符串数组中的元素进行比较,并且对相同元素的个数,每一个不同的元素进行记录,最后将结果输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | <br> package main; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; public class txt2{ public static void main(String[] args) throws Exception { File file = new File( "D:\\Android\\软件工程作业\\src\\ENGl.txt" ); //导入txt文档 FileReader reader = new FileReader(file); int fileLen = ( int )file.length(); char [] chars = new char [fileLen]; reader.read(chars); String txt = String.valueOf(chars); String[] a=txt.split( "[^a-zA-Z]+" ); //利用正则表达式将字符串划分为单词字符串数组 int n=a.length; //获取文章中单词个数 int nind= 0 ,wind= 0 ; //nind表示文章中的不同单词个数,初始值为0,wind代表文章中总的单词数 Object[][] b= new Object[n][ 2 ]; for (;wind<n;wind++){ int k= 0 ; //用k标记单词是否已经出现,单词已经出现,在已存数组中匹配,若匹配则相应单词数目加1 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++; } } BufferedReader br1= new BufferedReader( new FileReader( "D:\\Android\\软件工程作业\\src\\particle.txt" )); //字符输入流 从文件读 String str=br1.readLine(); String[] arg=str.split( "[^a-zA-Z]+" ); //利用正则表达式将字符串划分为单词字符串数组 int m=arg.length; //判断文章中词语是否为虚词,如果为虚词则在比较频率时不计较在内 for ( int i= 0 ;i<nind;i++){ for ( int j= 0 ;j<m;j++ ){ if (((String) b[i][ 0 ]).equalsIgnoreCase(arg[j])){ b[i][ 1 ]= 0 ; } } } for ( int i= 0 ;i< 10 ;i++){ int max= 0 ; for ( int j= 0 ;j<nind;j++){ if (( int )b[j][ 1 ]>( int )b[max][ 1 ]){ max=j; } } System.out.println(b[max][ 0 ]+ "出现次数为:" +b[max][ 1 ]); b[max][ 1 ]= 0 ; } } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步