今天主要学习了部分文件输入输出的内容如下:
(1)类型.valueOf()是将括号中的参数转化为该类型(2)字节输入输出流:FileInputStream是InputStream的子类,是操作文件的字节输入流,BufferedInputStream是自带缓冲区的流,即内部含有一个大小为8192的字节数组,当用read()方法读入数据时,首先将读写的数据存入定义好的数组,然后一次性进行操作,与缓冲区类似,可以有效地提高数据的读入效率。输出与之相同。BufferedInputStream与FileInputStream还有一点不同,FileInputStream的构造方法是接受文件名或者file类型的参数作为被包装对象,而前者是接受后者类型的参数作为被包装对象。判断是否读取到文件末尾的方法:当FileInputStream或BufferedInputStream对象名.read()=-1时,表示已经读取到文件末尾。(3)JAVA中字符串比较equals()和equalsIgnoreCase()的区别:前者对字符串的比较需要区分大小写,而后者不区分。
对于今天的实验,有以下思路:
(1)首先读入文件,将所有的字符读入到一个字符数组中。
(2)将字符串数组单词字符串数组。
(3)对字符串数组中的元素进行比较,并且对相同元素的个数,每一个不同的元素进行记录,最后将结果输出。
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; } } }