task3:词频统计
相关的类:
java.util.regex.Pattern
static Pattern compile(String regex) //编译模式
static Pattern compile(String regex, int flags) //编译模式并指定标志
Matcher matcher(CharSequence input) //根据这个模式创建matcher对象
String pattern() //返回这个对象的模式匹配字符串
String[] split(CharSequence input) //根据指定的模式分隔字符串为数组
java.util.regex.Matcher
boolean find() //尝试查找下一个匹配的子串,找到返回true
int start() //上一个匹配的子串开始的索引位置
int end() //上一个匹配的子串的结尾的后一个位置索引
String group() //返回上一个匹配的子串
int groupCount() //返回匹配组模式的个数
Pattern pattern() //返回模式匹配字符串
思路:
这么要求肯定是要用正则的了,然后以字母开头,"\\b[A-Za-z]", 然后呢单词里可以包含字母数组"[A-Za-z0-9]",不要用"\\w", 这个里还有个下划线,然后单词长度大于等于4, 组合一下就是"\\b[A-Za-z][A-Za-z0-9]{3,}\\b", 结尾肯定是字母或数字无疑了。然后就是根据模式查找匹配的子串,转换为小写存入Map中。提取映射的键名到集合中,最后用一个迭代器根据键名的集合循环读出映射中的值。
源程序:
贴个程序吧:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set; public class countcha { public static void main(String[] args)
{
Map<String,Integer> numcount=new HashMap<String,Integer>();
//regex
Pattern pat=Pattern.compile("\\b[A-Za-z][A-Za-z0-9]{3,}\\b");
Scanner in=new Scanner(System.in);
System.out.print("please input a string:");
String sda=in.nextLine();
in.close();
Matcher mth=pat.matcher(sda);
boolean tf=mth.find();
while(tf)
{
String buffer=mth.group().toLowerCase();
numcount.put(buffer, numcount.get(buffer)==null?1:numcount.get(buffer)+1);
tf=mth.find();
} Set<String> countSet=numcount.keySet();
//output
Iterator<String> point=countSet.iterator();
while(point.hasNext())
{
String value=(String)point.next();
System.out.println(value+":"+numcount.get(value));
}
}
}
运行结果:

附加:
另外还有个说从文本读入数据统计单词个数的,这个差不多,按行读取,然后模式循环匹配直到文件结尾,如果发现单词则查询已存在的映射中是否已有,有则加1, 没有则置1。最后输出映射中的内容。我用的数据是“because of you”这首歌词,命名为becauseofyou.txt放在项目根目录下了。测试结果:

结论:
预计用时1h, 结果正则卡死我了,不太熟悉,用时4h+。
具体源码地址:https://github.com/blocksmz/task3
task3:词频统计的更多相关文章
- 作业3-个人项目<词频统计>
上了一天的课,现在终于可以静下来更新我的博客了. 越来越发现,写博客是一种享受.来看看这次小林老师的“作战任务”. 词频统计 单词: 包含有4个或4个以上的字 ...
- C语言实现词频统计——第二版
原需求 1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符. 2.统计英文单词在本文件的出现次数 3.将统计结果排序 4.显示排序结果 新需求: 1.小文件输入. 为表明程序能跑 2.支持命 ...
- c语言实现词频统计
需求: 1.设计一个词频统计软件,统计给定英文文章的单词频率. 2.文章中包含的标点不计入统计. 3.将统计结果以从大到小的排序方式输出. 设计: 1.因为是跨专业0.0···并不会c++和java, ...
- 软件工程第一次个人项目——词频统计by11061153柴泽华
一.预计工程设计时间 明确要求: 15min: 查阅资料: 1h: 学习C++基础知识与特性: 4-5h: 主函数编写及输入输出部分: 0.5h: 文件的遍历: 1h: 编写两种模式的词频统计函数: ...
- python瓦登尔湖词频统计
#瓦登尔湖词频统计: import string path = 'D:/python3/Walden.txt' with open(path,'r',encoding= 'utf-8') as tex ...
- Hadoop上的中文分词与词频统计实践 (有待学习 http://www.cnblogs.com/jiejue/archive/2012/12/16/2820788.html)
解决问题的方案 Hadoop上的中文分词与词频统计实践 首先来推荐相关材料:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-c ...
- pyspark进行词频统计并返回topN
Part I:词频统计并返回topN 统计的文本数据: what do you do how do you do how do you do how are you from operator imp ...
- 使用storm分别进行计数和词频统计
计数 直接上代码 public class LocalStormSumTopology { public static void main(String[] agrs) { //Topology是通过 ...
- jieba库分词词频统计
代码已发至github上的python文件 词频统计结果如下(词频为1的词组数量已省略): {'是': 5, '风格': 4, '擅长': 4, '的': 4, '兴趣': 4, '宣言': 4, ' ...
随机推荐
- Java-Web 用html和css写一个EasyMall注册界面
要求: html代码: <!DOCTYPE html> <html> <head> <title>EasyMall注册页面</title> ...
- 学习笔记之SQL 教程
SQL 教程 | 菜鸟教程 http://www.runoob.com/sql/sql-tutorial.html SQL,指结构化查询语言,全称是 Structured Query Language ...
- 【失败】CentOS 6.5安装VNCserver 并开启远程桌面
如果你的centos系统压根就没装CDE.Gnome等桌面,那你先执行这条命令,把GUI环境装上,no GUI no VNC yum -y groupinstall 'GNOME Desktop En ...
- 代理Servlet过滤器
Spring Security借助一些列Servlet 过滤器 来提供 各种 安全性功能. 我们只需要在应用中的 web.xml 中配置 一个过滤器. <filter> <filte ...
- cmd变量,参数,for循环,
@echo offrem *****************************************************rem Create By Q_rui CopryRight@_ ...
- Ubuntu无法sudo提权,报当前用户不在sudoers文件中错误
Ubuntu安装后默认root不能登陆系统,密码也是随机生成,其他用户使用root权限,可以使用sudo提权,前提是该用户在/etc/sudoers配置列表中. 但是有时用户名从/etc/sudoer ...
- leetcode861
public class Solution { public int MatrixScore(int[][] A) { ); ].GetLength(); //判断最高位是否为1 ; i < r ...
- WordPress无法发送电子邮件,可能原因:您的主机禁用了mail()函数解决方案
体验更优排版请移步原文:http://blog.kwin.wang/website/wp-cant-send-email-solution.html 最近折腾了下WordPress,给米表 搭了个论坛 ...
- Eclipse apk 签名
Eclipse apk 签名 project>right mouse click>android tool>Export signed Application package cre ...
- eclipse报Access restriction: The type 'BASE64Decoder' is not API处理方法
今天从svn更新代码之后,由于代码中使用了BASE64Encoder 更新之后报如下错误: Access restriction: The type ‘BASE64Decoder’ is not A ...