这个小项目用了两种方法解决了该功能的实现。

  1.两种方法的功能和具体实现

  代码可以成功运行,但是有一些情况考虑不完整,一种方法用了FileOutputStream输出流,为了解决空格无法统计问题,对文本实现一次重写,用String类的replace方法将空格用其他字符替换,然后可以实现字母数,单词数和行数的统计。另一种方法没有重新写文本,直接在缓冲区中处理文本,除上面三个之外还统计了空格数,字符总数和标点符号数。

  2.优缺点比较

  方法一可以统计出空行,而方法二由于是使用bufferedReader,每一行统计一次,所以无法读出没有内容的空行;但是方法二没有用到写入文本的FileOutputStream流,相对来说不容易出错。两种方法都有些小缺点,但能实现一般的统计功能。

  3.项目源码

  

 package pro2;

 import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader; /**
* 实现能计算一个文本的字符数,单词数和行数的功能
* @author PC
*
*/ public class wcProject { private static int charcalculate=0;
private static int wordcalculate=0;
private static int linecalculate=0; //解析字符数,单词数,行数,空格数
public static void calculate2() {
String str="";
int words = 0;//单词数
int chars = 0;//字母数
int lines = 0;//行数
int spaces=0;//空格数
int marks=0;//标点数
int c=0;//字符数
int t=0;//\t
int count=0; FileInputStream fis=null;
BufferedReader br=null;
try {
File file = new File("aaa.txt");
if (file.exists()){//判断文件是否存在
//打开文件输入流
fis=new FileInputStream(file);
//字符流写入了缓冲区
br=new BufferedReader(new InputStreamReader(fis));
while((str=br.readLine())!=null){//readLine()每次读取一行,转化为字符串,br.readLine()为null时,不执行
char[] b=str.toCharArray();//将字符串对象中的字符转换为一个字符数组
for (int i = 0; i < str.length(); i++) {
// System.out.println("b[i]--"+b[i]);
if(b[i]!=' '&&b[i]!='\n'&&b[i]!='\t'&&b[i]!=','&&b[i]!='.'&&b[i]!='!'&&b[i]!=';'&&b[i]!='='){
chars++;
if(count>=1){
count=0;
}
}
if(b[i]==' '||b[i]=='\n'||b[i]=='\t'||b[i]==','||b[i]=='.'||b[i]=='!'||b[i]=='='||b[i]==';'){
if(b[i]==' '){
spaces++;
}
if(b[i]=='\t'){
t++;
}
if (b[i]==','||b[i]=='.'||b[i]=='?'||b[i]=='!'||b[i]==';'){
marks++;
} words++;System.out.println("b[i]--"+b[i]+"--words--"+words);
count++;
if(count>1){
words--;
}
}
}
lines++;//行数(由于每次读取一行,行数自加即可)
c=chars+spaces+marks+t;
}
//关闭文件
br.close();
System.out.println("字符数:"+c+"单词数:"+(words+lines)+",字母数:"+chars+",行数:"+lines+",标点数:"+marks+",空格数:"+spaces);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void calculate1() throws IOException
{
FileInputStream fis=new FileInputStream("aaa.txt");
FileOutputStream fos=new FileOutputStream("bbb.txt"); byte[] b=new byte[1024];
int len=0;
while((len=fis.read(b))!=-1){
String str=new String(b,0,len);
// System.out.println(str);
String a=str.replace(" ",",");
fos.write(a.getBytes());
} FileInputStream fis1=new FileInputStream("bbb.txt");
int a;
int count=0;
while((a=fis1.read())!=-1){
if(a!=' '&&a!='\n'&&a!='\t'&&a!=','&&a!='.'&&a!='!'&&a!=';'&&a!='='){
// System.out.println("c--"+(char)a);
charcalculate++;
if(count>=1){
// System.out.println("count--");
count=0;
}
}
if(a==' '||a=='\n'||a=='\t'||a==','||a=='.'||a=='!'||a=='='||a==';'){
// System.out.println("w--"+(char)a);
wordcalculate++;
count++;
if(count>1){
// System.out.println("wordcalculate--");
wordcalculate--;
}
}
if(a=='\n'){
// System.out.println("l--"+(char)a);
linecalculate++;
// count--;
}
}
charcalculate=charcalculate-linecalculate;
linecalculate++; fis.close();
fos.close(); }
public static void main(String[] args) throws IOException{
// calculate2(); // calculate1();
// System.out.println("CharNum:"+charcalculate);
// System.out.println("WordNum:"+wordcalculate);
// System.out.println("LineNum:"+linecalculate);
} }

本项目源码上传至个人GitHub:https://github.com/JingJiang0628/JavaLesson/blob/master/20170907-SoftwareEngineering/src/pro2/wcProject.java

个人小项目——Java实现WC功能的更多相关文章

  1. java实现wc功能

    github项目地址:https://github.com/3216004717/ruanjiangongcheng.git 项目相关要求 基本要求 wc.exe -c file.c //返回文件 f ...

  2. 软件工程实践小项目之模拟wc.exe的小程序

    github源码和工程文件地址:https://github.com/Jackchenyu/Word_counts/tree/smart 基本要求:要实现wc的基本功能即文件中字符数.单词数.行数的统 ...

  3. 模拟XShell的小项目

    不知道大家有没有用过XShell这款工具,这款工具通过windows可以远程操作处于开机状态的linux操作系统,也就是说把你的电脑和一台服务器连入网络,你通过输入服务器所在的IP地址建立一个会话就可 ...

  4. iOS:quartz2D绘图小项目(涂鸦画板)

    介绍:学了quartz2D的绘图知识后,我根据它的一些功能制作了一个小项目:涂鸦画板. 功能:绘制各种图形,还可以选取相册上的照片做涂鸦,然后保存到相册中.其中,还包括功能有:颜色的选取.线宽的选取. ...

  5. Java小项目--坦克大战(version1.0)

    Java小项目--坦克大战<TankWar1.0> 这个小项目主要是练习j2se的基础内容和面向对象的思想.项目实现了基本的简单功能,我方一辆坦克,用上下左右键控制移动方向,按F键为发射炮 ...

  6. 小白のjava实现wc.exe功能

    GitHub地址 项目完成情况 基本功能列表(已实现) wc.exe -c file.c     //返回文件 file.c 的字符数 wc.exe -w file.c    //返回文件 file. ...

  7. 个人项目:Java实现WC

    Java实现WC Github项目地址:https://github.com/auxshaw/WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个 ...

  8. JAVA实现WC.exe功能

    项目要求 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处理多个文件. 具体功能要求: 程序处理用户需求的模式为: wc.exe [paramet ...

  9. 个人项目:实现wc.exe(Java)

    本项目Github地址:https://github.com/NNewBoy/wc 项目相关要求 基本功能:(已实现) -c 统计文件字符数 -w 统计文件词的数目 -l 统计文件行数 扩展功能:(已 ...

随机推荐

  1. 我把双系统的win10抹除了现在开机只按option还是会出现双系统选择,怎么把那个win10给取消了或删除掉

    找到解决方法了,按步骤来吧,准备:[打开Finder如果你在侧边设备一栏里看不到 Macintosh HD 就打开Finder设置>边栏>勾选硬盘,如果能看到请无视这一行]1. 打开终端执 ...

  2. Openerp 修改 tree view 的列宽

    在 tree 的后边添加自定义css 列:“my_class" 然后在对应的css文件中,添加样式: 保存,重新刷新页面即可.

  3. Winform控件的问题汇总

    2014-01-19号 用户控件中的子控件(Btn控件),想要暴露到用户控件之外,以供其它其他控件使用的解决方法 1.在用户控件中定义一个委托和这个委托的事件. public delegate voi ...

  4. 利用js对象的特性,去掉数组中的重复项

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  5. nginx设置开机自启动

    每次启动nginx服务都需要到安装目录下的/sbin下面,感觉挺麻烦的. 下面介绍一下如何在Linux(CentOS)系统上,设置nginx开机自启动. 1 用脚本管理nginx服务 第一步:在/et ...

  6. Python2.7环境下安装pydbg

    From:http://blog.csdn.net/cheng_tian/article/details/7652058 最近在看<Python灰帽子:黑客与逆向工程师的Python编程之道&g ...

  7. http协议与他的三次握手和四次挥手

    http:超文本传输协议,在客户端与服务端之间传输信息,客户端发送html,css给服务器,服务器返回源码给客户端: https:是一种更安全的传输协议,在协议上加了一层密码,不容易被黑客攻击,更加安 ...

  8. 用table布局和div布局的区别

    table布局的渲染是将整个table全部渲染出来,如果网路不给力的情况下,整个table会卡死在页面div布局的话,页面渲染,会一个一个的div渲染,网页出现会一个一个出来,不管网速怎样,不会全局卡 ...

  9. 深入理解java集合框架之---------Arraylist集合

    ArrayList简介 ArrayLIst是动态数组,用MSDN的说法就是Array的复杂版本,它提供了动态的增加和减少元素,实现了Collection和List接口,可以灵活的设置数组的大小,要注意 ...

  10. R语言数组array函数

    数组是一个可以在两个以上的维度存储数据的R数据对象.例如 - 如果创建尺寸(2,3,4)的数组,那么创建4个矩形矩阵每2行3列.数组只能存储数据类型. 使用 array()函数创建数组.它需要向量作为 ...