java统计文件中字符串出现的次数_java程序员的从0到1:统计某字符串在某文件中出现的次数(面试题)...

目录:

1. 编程题目

2. 方法一

3. 方法二

4. 方法三

5. 方法四

6. 总结

正文:

1. 编程题目

写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。

2. 方法一

废话少说,先来看看方法一的代码:

public static intgetStringNumberMethod1(String fileName, String str) throws Exception {int num = 0;

BufferedReader bufferedReader= new BufferedReader(newFileReader(fileName));

String readLine= "";

StringBuffer stringBuffer= newStringBuffer();while((readLine = bufferedReader.readLine()) != null){

stringBuffer.append(readLine);

}for(int i = 0; i < stringBuffer.length(); i++){if(stringBuffer.indexOf(str, i) != -1){

i=stringBuffer.indexOf(str, i);

num++;

}

}returnnum;

}

首先利用输入流将文件中的字符串都存储到一个StringBuffer中,然后再去这个StringBuffer中统计此字符串出现的次数,这里要注意的是每次找到对应的字符串时,在接下来要找的这个字符串会发生变化。

3. 方法二

来看看第二种方法:

public static intgetStringNumberMethod2(String fileName, String str) throws Exception {int num = 0;

BufferedReader bufferedReader= new BufferedReader(newFileReader(fileName));

String readLine= "";

StringBuffer stringBuffer= newStringBuffer();while((readLine = bufferedReader.readLine()) != null){

stringBuffer.append(readLine);

}int start = 0;while( (start = stringBuffer.indexOf(str, start)) != -1){

stringBuffer= stringBuffer.delete(start, start +str.length());

num++;

}returnnum;

}

第二种方法应该比第一种方法更好理解,就是在找到对应的字符串时,下一次查找的字符串变成了原来的字符串删掉出现字符串位置之前的字符,第二种方法用到了StringBuffer的delete方法,因此在性能上会比第一种方法差一点。

4. 方法三

第三种方法:

public static intgetStringNumberMethod3(String fileName, String str) throws Exception {intnum ;

StringBuffer stringBuffer= newStringBuffer();

BufferedReader bufferedReader= new BufferedReader(newFileReader(fileName));

String readLine= "";while((readLine = bufferedReader.readLine()) != null){

stringBuffer.append(readLine);

}

num= stringBuffer.toString().split(str).length -1;returnnum;

}

第三种方法在查找对应字符串时,是先将StringBuffer转换成了String,然后利用split,将要查找的字符串当做是一种条件进行分割,得出的数值减一便是要查找字符串的数量。这种方法是不是很巧妙,但是它的性能如何呢,一会我们揭晓答案。

5. 方法四

第四种方法:

public static intgetStringNumberMethod4(String file, String find) throws Exception

{int count = 0;

Readerin = newFileReader(file);intc;while ((c = in.read()) != -1) {while (c == find.charAt(0)) {for (int i = 1; i < find.length(); i++) {

c= in.read();if (c !=find.charAt(i)){break;

}if (i == (find.length() - 1)) {

count++;

}

}

}

}returncount;

}

第四种方法是一边从文件中利用流读取数据,一边做判断,这种也可以实现这个功能,但是可想而知效率肯定不是最高的。

6. 总结

看完了以上四种方法,不知道大家看过瘾没,但是这四种方法既然都能达到这个目的,谁的效率又是最高呢?我特意做了一个测试,在一个文件中有50多万个字符,然后利用这四种方法从这个文件中查找对应的字符串,结果如下:

第一次测试结果(ms)

第二次测试结果(ms)

第三次测试结果(ms)

方法一

19

25

20

方法二

63

70

66

方法三

25

22

22

方法四

62

56

62

通过这个表格相信大家也能一目了然。希望大家能够学到一些东西,最后送大家一句共勉的话:如果觉得辛苦,那一定是因为在走上坡路,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值