c语言mine的字符个数是,WordCount统计文档字符数,单词数,行数

一、项目简介

源码地址:https://gitee.com/jie140367/WordCount2

作业地址:https://edu.cnblogs.com/campus/xnsy/Test/homework/2203

1.项目需求:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。

wc.exe -c file.c     //返回文件 file.c 的字符数

wc.exe -w file.c     //返回文件 file.c 的单词总数

wc.exe -l file.c     //返回文件 file.c 的总行数,

wc.exe -o outputFile.txt     //将结果输出到指定文件outputFile.txt

wc.exe -s            //递归处理目录下符合条件的文件

2.开发环境:Idea 2017

3.开发语言:Java

4.使用工具:exe4j(将java打包好的jar包转化为exe可执行文件)

exe4j下载地址:https://www.softpedia.com/get/Authoring-tools/Setup-creators/exe4j.shtml

exe4j教程:https://blog.csdn.net/xiazdong/article/details/7225734

二、项目实现

首先放上我的项目目录:

05dfa6fd6c8f788e6163a5e24d81a3f0.png

在拿到这个问题之后,首先要把文档抽象出一个对象,属性包含有字符数,单词数和行数。所以创建了一个java Pojo对象类——Wc.java

packagecom.jie;/*** @Author: jie140

* @Date: 2018/10/20 20:59*/

public classWc {//定义字符

public intchars;//定义单词

public intwords;//定义行数

public intlines;public intgetChars() {returnchars;

}public intgetWords() {returnwords;

}public intgetLines() {returnlines;

}public Wc(int chars, int words, intlines) {this.chars =chars;this.words =words;this.lines =lines;

}

}

之后还有接受参数的主启动类——Main.java

package com.jie;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

public class Main {

public static String inputFile; //输入文件

public static String outputFile; //输出字符文件

public static boolean inputC; //判断是否统计字符数 -c

public static boolean inputW; //判断是否统计单词数 -w

public static boolean inputL; //判断是否统计行数 -l

public static boolean inputO; //判断是否输出 -o

public static void main(String[] args) {

//初始化输入文件

inputFile = "C:\\Users\\Administrator\\Desktop\\作业.txt";

for (int i = 0; i < args.length; i++) {

if ("-c".equals(args[i])) {

inputC = true;

} else if ("-w".equals(args[i])) {

inputW = true;

} else if ("-l".equals(args[i])) {

inputL = true;

} else if ("-o".equals(args[i])) {

inputO = true;

//-o紧挨着输出文件名

outputFile = args[i + 1];

} else {

//如果遇到文件名参数,且前面不是-o,-o后面紧挨着输出文件,那么这个文件就是输入文件

if (!args[i - 1].equals("-o")) {

inputFile = args[i];

}

}

}

String outputStr = "";

//输入文件

String fileNames = inputFile;

String fn;

fn = fileNames;

//分割出实际文件名

String fileShortName = fn.substring(fn.lastIndexOf("\\") + 1, fn.length());

if (inputC || inputW || inputL) {

Wc wc = StatisticalCount.OutPutCount(fn);

if (inputC) {

outputStr += fileShortName+", char: "+wc.getChars()+"\r\n";

}

if (inputW) {

outputStr += fileShortName+", word: "+wc.getWords()+"\r\n";

}

if (inputL) {

outputStr += fileShortName+", line: "+wc.getLines()+"\r\n";

}

}

System.out.println(outputStr);

if (!inputO) {

//如果没有给输出参数,输出到默认文本中

outputFile = "result.txt";

}

try {

//否则定义新文件,输出到新文件中

File writeName = new File(outputFile);

writeName.createNewFile();

BufferedWriter out = new BufferedWriter(new FileWriter(writeName));

out.write(outputStr);

out.flush();

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

其中的逻辑实现类比较复杂,所以又创建了一个专门返回Wc对象的类——StatisticalCount.java,传入空的Wc对象,经过逻辑处理,返回一个具有字符数,单词数和行数的Wc对象。最后打印出来并保存到文件result.txt中。

package com.jie;

import java.io.*;

/**

* @Author: jie140

* @Date: 2018/10/20 20:59

*/

public class StatisticalCount {

public static Wc OutPutCount(String fileName)

{

//初始化文件的系数值

Wc wc=new Wc(0,0,0);

//当前字符

char charNow;

try

{

//创建文件并读取

File filename = new File(fileName);

InputStreamReader reader = new InputStreamReader(

new FileInputStream(filename));

BufferedReader br = new BufferedReader(reader);

//读取一行的数据

String line ;

line = br.readLine();

//是否分割

boolean partition=true;

while (line != null)

{

//获取一行中字符长度

wc.chars+=line.length();

wc.lines++;

for(int i=0;i

{

//当前字符

charNow=line.charAt(i);

//分割出单词

if(partition==true&&charNow!=' '&&charNow!='\t'&&charNow!=','&&charNow!=',')

{

wc.words++;

}

//分割

if(charNow==' '||charNow=='\t'||charNow==','||charNow==',')

{

partition=true;

}

}

line = br.readLine();

}

//加上回车长度

wc.chars+=wc.lines-1;

br.close();

}

catch (IOException e)

{

e.printStackTrace();

}

return wc;

}

}

三、测试项目

1、等价类划分:

输入

有效等价类

无效等价类

wc.exe -参数 文件

参数-c

除了-c,-w,-l,-o之外的参数输入,错误的文件名

参数-l

参数-w

参数-o

正确存在的文件名

2、测试:

输入

结果

wc.exe -c

作业.txt, char: 37

wc.exe -l

作业.txt, line: 4

wc.exe -w

作业.txt, word: 31

wc.exe -c -w

作业.txt, char: 37

作业.txt, word: 31

wc.exe -c -w -o result2.txt

作业.txt, char: 37

作业.txt, word: 31

wc.exe -z

文件无输出

3.测试文件内容

4e01b66bd43b6b1de35765859d24c508.png

4.执行结果

e69feac55101577502f1e7b369d8c32a.png

四、项目总结

该项目主要运用到的思想是 面向对象的思想。

1:通过外部dos命令传入到Main函数中args数组中,通过循环和条件语句进行分功能运行。

2.使用了exe4j之后会弹窗,不能输出控制台语句。

3.调用-c -w -l 的功能中间使用到了大量的IO知识和文件操作,不了解的小伙伴请多参考几篇博客进行知识补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值