当前位置: 首页>编程语言>正文

统计字符个数有多少 Java java统计各种字符个数

---恢复内容开始---

Gitee项目地址:项目地址

https://gitee.com/ZK154/WordCount.git

1.解题思路

首先,当我读完作业要求后,我有了一个大概的思路。   这是一个IO流的问题,有文件的读与写,有以下几点需要注意:

判断关键输入符是否存在(-c , -w ,-l , -o)。

判断读入文件是否存在 。

判断写入文件是否存在。

判断控制台输入格式是否正确 。

对文件内容要用正则表达式筛选。

这几点分开看并不难,但是合起来比较乱。对文件中其他字符、字母的查找、汉字的去除要用到正则表达式,因为要求生成.exe可执行文件,所以我选择java编程

2.准备工作

下载Myeclipse / eclipse / Sublime Text3  任选一样

下载JDK , java编程的核心 。

下载exe4j 用于生成exe文件 。 exe4j下载

3.实现编码

为了实现功能,我写了6个静态函数:

int linewNum(String fileName)           //接受文件名,返回行数,

int wordNum(String fileName )        //接受文件名 ,返回单词数,

int characterNum(String fileName)         //接受文件名,返回字符数,

void writeFile(String targetFile, String save)   //接受目标文件与要保存的数据

void writeResult(String string)          //接受保存的数据,保存进默认的result.txt文件

String selectC(String[] str, String target)          //查询.c文件名,并返回

每个函数都符合“单入口,单出口”的结构化程序设计原则,只需传递一个参数就可以完成功能,代码复用性很强。

说明:

控制台输入进来的就是一个字符串,例如“wc.exe -w test.c ”,我们想要获得要查询的文件名“test.c”就要对字符串进行分割 java里Object.split( )可以现,返回一个数组。同理 “-w”,"-c","-l","-o"这些关键字也可以获得,这样根据这些字符就可以进行功能的实现。

4.具体代码

4.1实现对字符的统计

按字节读取先存入char数组里,再进行统计,注意:回车包含两个符号"\r\n"

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_统计字符个数有多少 Java,第1张

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_文件名_02,第2张

1 public static int characterNum(String fileName) throwsIOException {2 File file = newFile(fileName);3 int x = 0;4 if(file.exists()) {5 String path = file.getAbsolutePath();//得到exe的文件路径

6 FileReader fr = newFileReader(path);7 BufferedReader br = newBufferedReader(fr);8 String str;9 char[] ch = new char[300000];10 int len = 0;11

12 while ((len = br.read(ch)) != -1) {13 x =len;14 //System.out.println(ch[len]);

15 }16 fr.close();17 br.close();18 System.out.println("字符数:" +x);19 writeResult("字符数:" + x + "\r\n");20 if (!(x != 0)) {21 x = x + 1;22 }23 }24

25 returnx;26 }

characterNum

4.2实现对单词的统计

题目要求"," 和" "分格的算单词,先用正则表达式过滤汉字,再将"," 替换成空格,这样就能分清哪些是单词,在用split按空格分割,单词就出来了

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_统计字符个数有多少 Java,第1张

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_文件名_02,第2张

1 //单词数

2 public static int wordNum(String fileName) throwsIOException {3 File file = newFile(fileName);4 int total = 0;5 if(file.exists()) {6 String path = file.getAbsolutePath();//得到exe的文件路径

7 FileReader fr = newFileReader(path);8 BufferedReader br = newBufferedReader(fr);9 String str;10 int line = 0;11 ArrayList array = newArrayList();12 while ((str = br.readLine()) != null) {13 str = str.replaceAll("[(\\u4e00-\\u9fa5)]", "");//去除汉字

14 str = str.replaceAll(",", " "); //去除空格

15 String[] str1 = str.split("\\s+"); //按空格分割

16 array.add(str1); //放入集合

17 line++;18 }19 fr.close();20 br.close();21

22 String regex = ".*[a-zA-Z]+.*"; //正则判断每个数组中是否存在有效单词(存在字母)

23 Pattern p =Pattern.compile(regex);24 Iterator it =array.iterator();25 while(it.hasNext()) {26 String[] string =(String[]) it.next();27 for (int y = 0; y <= string.length - 1; y++) {28 Matcher m =p.matcher(string[y]);29 if(m.matches()) {30 total++; //每存在一个total加1

31 }32 }33 }34 System.out.println("单词数:" +total);35 writeResult("单词数:" + total + "\r\n");36 if (!(total != 0)) {37 total = total + 1;38 }39 }40

41 returntotal;42 }

wordNum

4.3实现对行数的统计

java File类自带函数readline可以按行读取,定义一个int形变量 ,每读一行则加一

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_统计字符个数有多少 Java,第1张

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_文件名_02,第2张

1 //行数

2 public static int lineNum(String fileName) throwsIOException {3 File file = newFile(fileName);4 int line = 0;5 if(file.exists()) {6 String path = new File(fileName).getAbsolutePath();//得到exe的文件路径

7 FileReader fr = newFileReader(path);8 BufferedReader br = newBufferedReader(fr);9 while (br.readLine() != null) { //按行读取,每存在一行line+1

10 line++;11 }12 fr.close();13 br.close();14 System.out.println("行数:" +line);15 writeResult("行数:" + line + "\r\n");16 if (!(line != 0)) {17 line = line + 1;18 }19 }20

21 returnline;22 }

lineNum

4.4实现对默认result.txt的写入

现获取result.txt的地址,没有的话java里的FileWrite自动生成result.txt文件

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_统计字符个数有多少 Java,第1张

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_文件名_02,第2张

1 //自动写入result.txt文件中

2 public static void writeResult(String string) throwsIOException {3

4 String path = new File("result.txt").getAbsolutePath();5 FileWriter fw = new FileWriter(path, true);6 fw.write(string);7 if (fw != null) {8 fw.close();9 }10 }

writeResult

4.5实现对指定文本的写入

接受目标文件名,并获得路径,,创建出的filewrite对象使用write( )方法存入接受的信息字符串

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_统计字符个数有多少 Java,第1张

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_文件名_02,第2张

1 //写进指定文件

2 public static void writeFile(String targetFile, String save) throwsIOException {3

4 String path = new File(targetFile).getAbsolutePath(); //得到目标文件路径

5 FileWriter fw = new FileWriter(path, true);6 fw.write(save);7 if (fw != null) {8 fw.close();9 System.out.println("存储成功!");10 }11

12 }

writeFile

5.代码测试

测试文件“test.c”,写入文件output.txt,默认的result.txt与wc.exe都在同一目录下。但写入文件需要存在

5.1 测试对行数、字符数、单词数单独查询

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_文件名_11,第11张

5.2 测试关键字符的联合查询,因为是添加模式,result.txt里信息没有被覆盖

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_java用字节流统计程序行数_12,第12张

5.3 测试对指定文件的写入(-o)

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_java用字节流统计程序行数_13,第13张

5.4 测试代码能否辨别错误:

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_System_14,第14张

6.单元测试

将程序中最小的模块拿出来进行测试,

6.1对characterNum测试:结果正确无误

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_System_15,第15张

6.2 对wordNum进行测试:符合结果通过

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_文件路径_16,第16张

6.3 对lineNum函数进行测试:

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_System_17,第17张

6.4 对writeFile函数的测试:

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_文件路径_18,第18张

6.5 对writeResult函数的测试:

统计字符个数有多少 Java java统计各种字符个数,统计字符个数有多少 Java java统计各种字符个数_文件路径_19,第19张

测试结果:各函数在单独执行下都能完成功能。

7.个人感悟

通过在作业中对代码的编写的过程中,我不仅仅为了完成代码的功能,同事也在考虑如何用软件工程的思想来看待它,如何提高代码的复用性 ? 怎样降低代码的耦合度 ? 逻辑中要做哪些健壮性的判断 ? 那些步骤需要提高程序的友好度? 这些问题都是在软件工程这个大角度来完善程序设计,这些思考方式与训练是我编写中最多的收获,更让我明白高质量的编程才是最终目的。

8.参考资料

---恢复内容结束---


https://www.xamrdz.com/lan/5pr1963056.html

相关文章: