写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数.
这是一个常见的算法提问,网上搜索结果不是很满意。自己解决了一下:
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.文件名和给定字符串由命令行输入得到。
在C++编程中,实现一个程序来查找文件中特定字符串是一项基本任务,它涉及到文件操作、字符串处理和用户交互。以下是一个详细的步骤说明,以及如何根据给定的标题和描述来构建这样的程序。 首先,我们需要引入必要...
在本程序中,我们需要将转换后的字符串写入到一个磁盘文件中。这个过程可以通过使用标准库函数 `fopen`、`fputc` 和 `fclose` 实现。 首先,我们使用 `fopen` 函数打开文件,指定文件名和打开模式(在这里是写入...
在这个实验"实验方法比较字符串sample.asm"中,我们关注的是如何在汇编语言环境下实现字符串的比较。汇编语言是一种低级编程语言,它直接对应于计算机的机器指令,因此理解和掌握汇编语言对于理解计算机底层工作原理...
在上面的程序中,整数 `k` 使用 `write` 语句转换为字符串 `cTemp`,然后将其与文件名 "myFile" 连接起来,形成一个完整的文件名。 2. 字符串操作 在 Fortran 语言中,字符串操作是非常重要的一部分。Fortran 提供...
标题 "输入一个字符串,输出所有该字符串的组合情况" 涉及的主要知识点是字符串处理和算法,特别是组合和排列的生成。在这个问题中,我们需要编写程序来生成一个给定字符串的所有可能的子序列或子字符串,这通常涉及...
- **提取文件名**:通过调用 `s.substring(s.lastIndexOf("/")+1)` 方法,从字符串 `s` 中提取出文件名部分。这里的关键在于使用 `lastIndexOf` 方法找到最后一个斜杠 “/” 的位置,然后使用 `substring` 方法从该...
`filenamify`是一个非常实用的模块,它的主要功能是将任意字符串转换为一个有效的、安全的文件名,确保这些文件名在各种操作系统上都能正常工作。这个模块尤其重要,因为在创建、移动或保存文件时,如果文件名包含不...
实验四,字符串和输入输出流的实验,为我们提供了一个深入理解流的概念分类、掌握字符串常用操作方法、掌握流的构造、套接在编程中的应用、文件流以及对象的串行化的机会。通过实验,我们可以更好地理解和掌握这些...
而这个“批量修改文件名脚本”很可能是一个批处理文件(.bat),它利用了Windows内置的命令行工具来实现文件名的批量更改。 批处理脚本的工作原理是通过一系列命令行指令,如REN(rename)命令,来实现文件的重命名...
在上面的代码中,我们首先创建了一个测试字符串,然后指定了文件的路径和文件名,最后使用FileUtils工具类将字符串写入到txt文件中。 使用FileUtils工具类可以非常方便地将字符串数据存储到txt文件中,从而满足我们...
将该bat文件放入想处理的文件的同一文件夹中(注意,该bat会处理同一文件夹中所有的文件),双击运行,输入想删除的字符串,回车运行。
程序猿
在本例中,SaveMesToXML方法用于将生成的字符串保存为XML文件。 SaveMesToXML方法首先将字符串加载到XmlDocument对象中,然后将XmlDocument对象保存到文件中。SaveMesToXML方法返回保存的文件名。 其他知识点 * ...
"多文件中字符串查找工具"就是这样的一个实用程序,它能够帮助用户快速、高效地在大量的文本文件中搜索特定的字符串。这个工具的使用极大地提高了工作效率,避免了手动逐个文件检查的繁琐过程。 首先,我们要理解的...
1. 字符串统计:本节的主要任务是统计文本中的字符个数,包括英文字母、数字、空格和除此之外的其他字符。 2. 文件操作:本节使用 `fopen` 函数打开文件,并使用 `fclose` 函数关闭文件。 3. 字符判断:本节使用 `if...
`instr()` 函数在编程语言中,如VBScript或ColdFusion,是一个非常实用的字符串处理函数,用于在源字符串中查找目标字符串出现的位置。它能够帮助开发者判断目标字符串是否存在于第一个字符串中,并返回目标字符串的...
在IT行业中,字符串分解是一个常见的任务,特别是在处理用户输入、数据解析或文件操作时。MFC(Microsoft Foundation Classes)是微软提供的一套C++库,它为Windows应用程序开发提供了丰富的功能,包括文件读写操作...
在“文件”下拉菜单中,选择“在工作区中搜索”,接着在“文件名”区域输入.java或.jsp,然后在“搜索”框中输入查询字符串。点击“搜索”按钮,结果会显示在侧边栏。 除了基本的搜索,这些IDE还提供了高级搜索选项...
在DOS环境下,用户经常需要查找指定文件中是否包含特定的字符串,或者统计字符串在文件中的出现次数。为此,DOS提供了一个内置命令`find`来满足这一需求。 #### 二、DOS find 命令详解 1. **基本用法**: - `find ...