词数统计系统。

作业解析:这次作业的内容是从本地读取一个程序代码,计算出这个程序中的行数,单词数,也可进行拓展。

实现语言:java

编程思路:

程序是由各种单词和符号组成的,单词包括关键字,标识符这些单词组成的,符号包括各种运算符或者是分隔符...在这里统分为字符和单词。

在java语言中,可以实例化一个FileReader内读取程序,再使用BufferReader从字符输入流中读取文本并将字符存入缓冲区以便能提供字符、数组和线段的高效读取,BufferReader类的readline()函数能够读取一个文本行,返回一个字符串。这时可以使用String类的split()函数,split()函数能够分割字符串,参数为正则表达式,返回值为一个字符串数组。写程序中遇到的困难基本都出在这里,下边会细说。之后便可以针对分割结果进行计数,运行结果如下图,图1是运行结果,图2 是测试的程序。

调试过程:

  1. 这测试的过程中发现统计的行数总会莫名其妙的多很多,经过一番查找,发现是那些以字符结尾,然后换行的句子会出现这个问题,一番查找之后了解到split()函数在同时遇到多个需要剔除的字符时,会在返回结果里创建一个“”的元素,加一个判断结构便解决了问题。
  2. 在书写的正则表达式里含有.|(){}会报错,查看了之后有两个原因:1°.|为转义字符,前边需要添加\\。2°编译器会把表达式内的(){}识别为运算符(){}导致语法错误。

图1

图2

经验总结:写这个程序学习另一个很重要的知识--正则表达式,下面简单概括一下正则表达式。

定义与用途:正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

由此可知,我们可以使用正则表达式对给定字符串进行匹配,查看它是否满足我们定下的正则表达规则。与此相似,我们也可以通过正则表达式从字符串中获取我们需要的部分。

语法:正则表达式是由一些普通字符和一些元字符组成的。其中普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。

一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串。例如:HandelHändelHaendel这三个字符串,都可以由“H(a|ä|ae)ndel”这个模式来描述。大部分正则表达式的形式都有如下的结构:

选择
|竖直分隔符代表选择。例如“gray|grey”可以匹配grey或gray。
数量限定
某个字符后的数量限定符用来限定前面这个字符允许出现的个数。最常见的数量限定符包括“+”、“?”和“*”(不加数量限定则代表出现一次且仅出现一次):
+加号代表前面的字符必须至少出现一次。(1次、或多次)。例如,“goo+gle”可以匹配googlegoooglegoooogle等;
?问号代表前面的字符最多只可以出现一次。(0次、或1次)。例如,“colou?r”可以匹配color或者colour;
*星号代表前面的字符可以不出现,也可以出现一次或者多次。(0次、或1次、或多次)。例如,“0*42”可以匹配42042004200042等。
匹配
圆括号可以用来定义操作符的范围和优先度。例如,“gr(a|e)y”等价于“gray|grey”,“(grand)?father”匹配fathergrandfather

上述这些构造子都可以自由组合,因此,“H(ae?|ä)ndel”和“H(a|ae|ä)ndel”是相同的。

精确的语法可能因不同的工具或程序而异。

维基百科,词条:正则表达式

因为还没有更深入的使用,就先总结到这里,毫无疑问,正则表达式是一个很强大的工具。

[java]wordcount程序的更多相关文章

  1. 编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本]

    编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本] 1. 开发环境 Jdk 1.7.0_72 Maven 3.2.1 Scala 2.10.6 Spark 1.6 ...

  2. 将java开发的wordcount程序提交到spark集群上运行

    今天来分享下将java开发的wordcount程序提交到spark集群上运行的步骤. 第一个步骤之前,先上传文本文件,spark.txt,然用命令hadoop fs -put spark.txt /s ...

  3. 大数据之路week07--day03(Hadoop深入理解,JAVA代码编写WordCount程序,以及扩展升级)

    什么是MapReduce 你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查并且数出有多少张是黑桃. MapReduce方法则是: 1.给在座的所有玩家中分配这摞牌 2.让每个玩家数自己手中的牌有几 ...

  4. Hadoop入门实践之从WordCount程序说起

    这段时间需要学习Hadoop了,以前一直听说Hadoop,但是从来没有研究过,这几天粗略看完了<Hadoop实战>这本书,对Hadoop编程有了大致的了解.接下来就是多看多写了.以Hado ...

  5. [转] 用SBT编译Spark的WordCount程序

    问题导读: 1.什么是sbt? 2.sbt项目环境如何建立? 3.如何使用sbt编译打包scala? [sbt介绍 sbt是一个代码编译工具,是scala界的mvn,可以编译scala,java等,需 ...

  6. Hadoop集群测试wordcount程序

    一.集群环境搭好了,我们来测试一下吧 1.在java下创建一个wordcount文件夹:mkdir wordcount 2.在此文件夹下创建两个文件,比如file1.txt和file2.txt 在fi ...

  7. Eclipse环境搭建并且运行wordcount程序

    一.安装Hadoop插件 1. 所需环境  hadoop2.0伪分布式环境平台正常运行 所需压缩包:eclipse-jee-luna-SR2-linux-gtk-x86_64.tar.gz 在Linu ...

  8. 09、高级编程之基于排序机制的wordcount程序

    package sparkcore.java; import java.util.Arrays; import java.util.Iterator; import org.apache.spark. ...

  9. Hadoop环境搭建及wordcount程序

    目的: 前期学习了一些机器学习基本算法,实际企业应用中算法是核心,运行的环境和数据处理的平台是基础. 手段: 搭建简易hadoop集群(由于机器限制在自己的笔记本上通过虚拟机搭建) 一.基础环境介绍 ...

随机推荐

  1. HTML代码简写法:Emmet和Haml

    http://www.ruanyifeng.com/blog/2013/06/emmet_and_haml.html?bsh_bid=657901854 HTML代码简写法:Emmet和Haml   ...

  2. python中if __name__ == '__main__': 的解析

    当你打开一个.py文件时,经常会在代码的最下面看到if __name__ ==  '__main__':,现在就来介 绍一下它的作用. 模块是对象,并且所有的模块都有一个内置属性 __name__.一 ...

  3. build and set proxy in Ubuntu

    build http://www.2cto.com/os/201310/249690.html set http://www.360doc.com/content/11/1112/00/2617151 ...

  4. ubuntu安装谷歌输入法

    1,sudo apt-get install fcitx-googlepinyin 2,在settings->Language Support里将keyboard input method sy ...

  5. jquery 如何去除select 控件重复的option

    这个去重不是很好用,如果id值不同,text是一样的,也会被去掉 <input type="button" class="btn" id="bt ...

  6. 上架到AppStore?第一次上架之路

    首先,用自己的Developer账户(个人付费),登陆Developer的Acount(注册证书到电脑上这一步以前就做过了,虽然忘了,但是百度上有教程,以后要注册再补-!) 打开证书管理Certifi ...

  7. C#如何获取物理网卡,虚拟网卡,以及无线网卡

    就不废话了,直接上代码 /// <summary></summary> /// 显示本机各网卡的详细信息 /// <summary></summary> ...

  8. 服务器sh脚本自动登录(mac)

    一不小心自己也有三台虚拟机了,每次都ssh -username@ip 然后在输入密码着实蛋疼,第一反应时脚本登录,但是作为脚本是逐行执行命令,是无法做到等待一个密码提示出现在输入密码的.查到mac下可 ...

  9. asp.net关于如何准许api跨域访问

    首先需要在原api接口的程序中在web.config添加如下节点(在<system.webServer>节点下) <!--准许跨域请求--> <httpProtocol& ...

  10. cocos2dx 中使用的一些C++ 11 特性

    0.  placeholder 头文件:<functional> namespace: placeholder placeholder 就是一堆帮助bind占参数位置的东西,名字分别为 _ ...