java程序员的从0到1:统计某字符串在某文件中出现的次数(面试题)
目录:
1. 编程题目
2. 方法一
3. 方法二
4. 方法三
5. 方法四
6. 总结
正文:
1. 编程题目
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。
2. 方法一
废话少说,先来看看方法一的代码:
public static int getStringNumberMethod1(String fileName, String str) throws Exception {
int num = ;
BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName));
String readLine = "";
StringBuffer stringBuffer = new StringBuffer();
while((readLine = bufferedReader.readLine()) != null){
stringBuffer.append(readLine);
}
for(int i = ; i < stringBuffer.length(); i++){
if(stringBuffer.indexOf(str, i) != -){
i = stringBuffer.indexOf(str, i);
num++;
}
}
return num;
}
首先利用输入流将文件中的字符串都存储到一个StringBuffer中,然后再去这个StringBuffer中统计此字符串出现的次数,这里要注意的是每次找到对应的字符串时,在接下来要找的这个字符串会发生变化。
3. 方法二
来看看第二种方法:
public static int getStringNumberMethod2(String fileName, String str) throws Exception {
int num = ;
BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName));
String readLine = "";
StringBuffer stringBuffer = new StringBuffer();
while((readLine = bufferedReader.readLine()) != null){
stringBuffer.append(readLine);
}
int start = ;
while( (start = stringBuffer.indexOf(str, start)) != -){
stringBuffer = stringBuffer.delete(start, start + str.length());
num ++;
}
return num;
}
第二种方法应该比第一种方法更好理解,就是在找到对应的字符串时,下一次查找的字符串变成了原来的字符串删掉出现字符串位置之前的字符,第二种方法用到了StringBuffer的delete方法,因此在性能上会比第一种方法差一点。
4. 方法三
第三种方法:
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 -;
return num;
}
第三种方法在查找对应字符串时,是先将StringBuffer转换成了String,然后利用split,将要查找的字符串当做是一种条件进行分割,得出的数值减一便是要查找字符串的数量。这种方法是不是很巧妙,但是它的性能如何呢,一会我们揭晓答案。
5. 方法四
第四种方法:
public static int getStringNumberMethod4(String file, String find) throws Exception
{
int count = ;
Reader in = new FileReader(file);
int c;
while ((c = in.read()) != -) {
while (c == find.charAt()) {
for (int i = ; i < find.length(); i++) {
c = in.read();
if (c != find.charAt(i)){
break;
}
if (i == (find.length() - )) {
count++;
}
}
}
}
return count;
}
第四种方法是一边从文件中利用流读取数据,一边做判断,这种也可以实现这个功能,但是可想而知效率肯定不是最高的。
6. 总结
看完了以上四种方法,不知道大家看过瘾没,但是这四种方法既然都能达到这个目的,谁的效率又是最高呢?我特意做了一个测试,在一个文件中有50多万个字符,然后利用这四种方法从这个文件中查找对应的字符串,结果如下:
| 第一次测试结果(ms) | 第二次测试结果(ms) | 第三次测试结果(ms) | |
| 方法一 | 19 | 25 | 20 |
| 方法二 | 63 | 70 | 66 |
| 方法三 | 25 | 22 | 22 |
| 方法四 | 62 | 56 | 62 |
通过这个表格相信大家也能一目了然。希望大家能够学到一些东西,最后送大家一句共勉的话:如果觉得辛苦,那一定是因为在走上坡路,谢谢。
java程序员的从0到1:统计某字符串在某文件中出现的次数(面试题)的更多相关文章
- 作为一名双非本科毕业的Java程序员,我该如何在日益严重的内卷化中避免被裁?
前言 对一个 Java 程序员而言,并发编程能否熟练掌握是判断他是不是优秀的重要标准之一.因为并发编程在 Java 语言中最为晦涩的知识点,它涉及内存.CPU.操作系统.编程语言等多方面的基础能力,更 ...
- java程序员的从0到1:@Resource与@Autowired的比较
目录: 1.@Resource与@Autowired的源码分析 2.@Resource与@Autowired的相同点 3.@Resource与@Autowired的不同点 正文: 1.@Resourc ...
- Java程序员面试题集(51-70)(转)
转:http://blog.csdn.net/jackfrued/article/details/17403101 Java程序员面试题集(51-70) 摘要:这一部分主要讲解了异常.多线程.容器和I ...
- Java程序员面试题集2
51.类ExampleA 继承Exception,类ExampleB 继承ExampleA. 有如下代码片断: try{ throw new ExampleB("b") }catc ...
- 2019年高级Java程序员面试题汇总
目录 JDK Dubbo Zookeeper Strut2 Spring系列 Redis系列 Mysql系列 Java多线程 消息中间件 线程池 事物 JVM 设计模式 其他 程序设计 基础知识 编程 ...
- JAVA程序员必看的15本书-JAVA自学书籍推荐
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...
- 2017年 Java 程序员,风光背后的危机
不得不承认,经历过行业的飞速发展期,互联网的整体发展趋于平稳.为什么这么说?为什么要放在 Java 程序员的盘点下说? 的确,对于进可攻前端,后可守后端大本营的 Java 程序员而言,虽然供应逐年上涨 ...
- Java程序员必须掌握的常用Linux命令。
Java程序员也是半个运维了,在日常开发中经常会接触到Linux环境操作.小公司的开发人员甚至是兼了全运维的工作,下面整理了一些常用的Linux操作命令. Linux常用指令 ls 显示文件或目录 - ...
- Java程序员如何在竞争中保持优势
Java程序员入门容易,进阶很难,想要在竞争中保持优势,脚踏实地的同时也要仰望星空规划自己的未来.时间在流逝,年龄在增加,你期望的薪水也在不断增多,你总得让自己能力持续增加以配得上想要的收入吧. 从初 ...
随机推荐
- rsync 服务器架设方法
作者: 北南南北 来自:Linuxsir.Org 摘要: rsync 是一个快速增量文件传输工具,它可以用于在同一主机备份内部的备分,我们还可以把它作为不同主机网络备份工具之用.本文主要讲述的是如何自 ...
- VMware设置及linux静态ip设置
1. VMWARE虚拟机NAT模式上网设置 1.1. VM虚拟机设置 1.1.1. 虚拟机全局设置 启动虚拟机选择[虚拟网络编辑器] 如果需要管理员权限点[更改设置],没有提示这忽略这一步 选 ...
- 171. Excel Sheet Column Number Excel表格的字母转成数字
[抄题]: Given a column title as appear in an Excel sheet, return its corresponding column number. For ...
- 在CentOS6.x下安装Compiz——桌面立方体,特效种种
很多人貌似认为compiz必须要emerland,但事实上,没这个必要. compiz+gnome,实用,而又华丽,是个不错的选择. compiz需要显卡驱动,一般情况下不成问题(别忘了这是很新的ce ...
- ubuntu 安装两个版本的Anaconda
1.下载anaconda2/anaconda3,下载地址:https://www.anaconda.com/download/#linux,anaconda官网如下所示,选择对应版本下载. 2.使用如 ...
- 数字图像处理实验(14):PROJECT 06-01,Web-Safe Colors 标签: 图像处理MATLAB 2017-05-27 20:45 116人阅读
实验要求: Objective: To know what are Web-safe colors, how to generate the RGB components for a given jp ...
- dataframe 用法总结
http://pda.readthedocs.io/en/latest/chp5.html data = [] 列表初始化 data = (,) data = {} 字典初始化 data = pd.D ...
- Build fat static library (device + simulator) using Xcode and SDK 4+
155down votefavorite 185 It appears that we can - theoretically - build a single static library that ...
- phpmyadmin安全预防
头疼的安全 之前服务器总是本人黑,千疮百孔,只能一步步的去做一些安全防范,如何防范自然先从如何渗透开始. 文章及建议 前段时间看到了个phpmyadmin提权的教程,很多人都说现在那里还有root帐号 ...
- 数独·唯一性技巧(Uniqueness)-1
唯一性技巧基于这样一个事实——各类出版物上发布的数独题目都只有唯一解.事实上,绝大多数数独玩家有这样的共识:即合格的数独题目解应该是唯一的.因此,为了保证题目合格.有效,出题者在制作题目时,会将一些虽 ...