写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数.
这是一个常见的算法提问,网上搜索结果不是很满意。自己解决了一下:
package com.xforward.ccf;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader;
import java.util.Arrays;
public class CopyOfFile_test_count {
public static void main(String[] args) {
try {
int count = countWords_ccf("D:\\test.txt", "aa");
System.out.println(count);
// count = countWords("D:\\test.txt", "a");
// System.out.println(count);
} catch (Exception e) {
e.printStackTrace();
}
}
/*
*这是网上搜索的东东,不是很理想~
*/
public static int countWords(String file, String find) throws Exception {
int count = 0;
Reader in = new FileReader(file);// FileReader()返回的字节流是以平台编码的流
int c;
while ((c = in.read()) != -1) {
while (c == find.charAt(0)) {
if(find.lenth()==1){
count++;
c = in.read();
}//这是我添加的,不然就是死循环 用"a"测试的时候
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;
}
public static int countWords_ccf(String file, String find) throws Exception {
int count = 0;
byte[] bytes = find.getBytes();
int find_l = bytes.length;
byte[] bytes_f = new byte[find_l];
RandomAccessFile in = new RandomAccessFile(file, "rw");//返回的字节流是以平台编码的流
int bytes_f_l = 0;
int read_mark = 0;
while (-1 != (bytes_f_l = in.read(bytes_f))) {// 这里不用担心~读到的数据是-1
if (bytes_f_l < find_l) {
break;
}
if (Arrays.equals(bytes, bytes_f)) {
count++;
}
in.seek(++read_mark);
}
return count;
}
}
----------------------------------------测试文件内容-----------------------------------------------
D:\test.txt
好aaadsaaaa
总结:<1>在Java I/O 中,充分地考虑编码问题是很重要的一个方向,如果搞不清原理的话是很费神的;<2>之所以应用RandomAccessFile()来处理文件输入,是它能自由操作文件指针,方便读取~
分享到:
相关推荐
编写函数统计给定字符串在文中出现的次数,如文中内容为asd asasdfg asd as zx67 asd mklo, 给定字符串为as,则函数返回6.文件名和给定字符串由命令行输入得到。
.编写一个程序,要求用户输入文件名和要查找的字符串。程序在文件中查找指定的字符串, 如果在某行中找到了该串,那么就把该行在屏幕上显示出来。最后,给出字符串在文件中 出现的次数。
比较字符串sample.asm(文件名) 试编写一程序:比较两个字符串stringl和string2所含的字符是否相同。若相同则显示‘Match’,否则,显示‘No match’。
将该bat文件放入想处理的文件的同一文件夹中(注意,该bat会处理同一文件夹中所有的文件),双击运行,输入想删除的字符串,回车运行。
filenamify - 将一个字符串转换为一个有效的安全的文件名
将某表示文件路径的字符串的文件名分离出文件路径
然后逐个打开每个文件名,再从每个文件中逐行读取字符串,读取字符串中对字符串中的数字字母符合等进行自动删除后,将字符串分割成多个子字符串,然后再对所有子字符串进行查重,逐个显示每个子字符串在那几个文件中...
程序猿
mfc 字符串中查找特殊字符 利用特殊字符分割字符串 mfc 字符串中查找特殊字符 利用特殊字符分割字符串 mfc 字符串中查找特殊字符 利用特殊字符分割字符串 mfc 字符串中查找特殊字符 利用特殊字符分割字符串 mfc 字符...
用VB语言写的函数,查找文件中是否存在指定字符串,如果存在则返回该字符串所在的行,不存在则返回空字符串
filenamify-cli:在命令行上将字符串转换为有效的安全文件名
把两个源字符串分别放在两个文本文件里,再把这两个文本文件放在程序所在目录下,运行时输入两个文件名就可以了.
3.12 我需要根据条件把一个复杂的表达式赋值给两个变量中的一 个。可以用下边这样的代码吗? ((condition) ? a : b) = complicated expression; . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 目录iii ...
安装中的注意事项........................................... 6 开始安装........................................................... 7 四种安装方式........................................... 7 图形界面...
批量修改文件名脚本。适用于window系统环境 ,使用时根据说明文件步骤操作。可实现批量修改文件或图片名称。
在文件中搜索字符串 在文件中搜索指定文本 在文本文件中搜索文本 将剪贴板复制到流和恢复 将文本文件赋值给一个字符串 将资源文件中Rft文本装载到TRichEdit 将长文件名转换成短文件名 彻底删除文件 打开资源管理器且...
函数作用:判断一个文件是否在使用中.................92 '85.函数作用:列出档案详细摘要信息.....................93 '86.函数作用:获取菜单ID编号及名称列表................93 '87.函数作用:状态列动态显示文字......
二、一个示例...........................................................................................................................8 三、make是如何工作的.............................................
批处理bat文件,将当前文件夹下所有文件,文件名中的name1替换位name2,简单的几行代码,执行批处理重命名操作,如果想删除特定字符,name2为空即可
遍历当前目录及子目录,搜索文件内的指定字符串,输出包含指定字符串的文件名、路径和字符串所在行及其行号。支持可以使用记事本打开的文本文件、源代码文件以及部分office文档(word、excel、ppt),其中office文件...