JAVA语言之java程序员的从0到1:统计某字符串在某文件中出现的次数(面试题)
小标 2019-03-04 来源 : 阅读 769 评论 0

摘要:本文主要向大家介绍了JAVA语言之java程序员的从0到1:统计某字符串在某文件中出现的次数(面试题),通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言之java程序员的从0到1:统计某字符串在某文件中出现的次数(面试题),通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

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

目录:




  1. 编程题目




  2. 方法一




  3. 方法二




  4. 方法三




  5. 方法四



  6. 总结



正文:



  1. 编程题目



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



  1. 方法一



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


复制代码
public  static int getStringNumberMethod1(String fileName, String str) throws Exception {
int num = 0;


    BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName));
    String readLine = "";
    StringBuffer stringBuffer = new StringBuffer();
    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++;
        }
    }
    return num;
}


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



  1. 方法二



  来看看第二种方法:


复制代码
public static int getStringNumberMethod2(String fileName, String str) throws Exception {
int num = 0;


    BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName));
    String readLine = "";
    StringBuffer stringBuffer = new StringBuffer();
    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 ++;
    }

    return num;
}


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



  1. 方法三



  第三种方法:


复制代码
public static int getStringNumberMethod3(String fileName, String str) throws Exception {
int num ;


    StringBuffer stringBuffer = new StringBuffer();
    BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName));
    String readLine = "";
    while((readLine = bufferedReader.readLine()) != null){
        stringBuffer.append(readLine);
    }

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

    return num;
}


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



  1. 方法四



  第四种方法:


复制代码
public static int getStringNumberMethod4(String file, String find) throws Exception
{
int count = 0;
Reader in = new FileReader(file);
int c;
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++;
}
}
}
}
return count;
}
复制代码
  第四种方法是一边从文件中利用流读取数据,一边做判断,这种也可以实现这个功能,但是可想而知效率肯定不是最高的。



  1. 总结



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


第一次测试结果(ms) 第二次测试结果(ms) 第三次测试结果(ms)


方法一 19  25  20
方法二 63  70  66
方法三 25  22  22
方法四 62  56  62

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

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程