是一个统计文件中单词个数,并按照个数从大到小输出的。输入文件名OK 了

单词是按照首字母排序的,,,里面用到映射等,,,注意重写比较函数,因为我们是要按值排序,而不是一般的按照键排序,,,,我们要输出的由多到少的个数,,,有个数是重复的

由于我们要按照个数多少排序,所以记得重写比较函数,为啥不能让数字做键,因为键不能重复,所以这里单词是键,OK 。

1 str.split("\\s+");这里记录分隔符

2 正则表达式,
\\d表示 0-9 的数字,
\\s表示 空格,回车,换行等空白符,
\\w表示单词字符(数字字母下划线)
+号表示一个或多个的意思

代码:

 package calnum;

 import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.ShortBuffer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.TreeMap; import javax.swing.Spring;
import javax.swing.text.html.parser.Entity; public class calwordnum{ public String readfile() throws IOException {
String all = null;
// System.out.print("##########################");
Scanner cin = new Scanner(System.in);
System.out.print("plz input file name:");
String filename = cin.next();
FileReader read = new FileReader(filename);
BufferedReader re = new BufferedReader(read);
StringBuffer strbuf = new StringBuffer(); String ss;
while ((ss = re.readLine()) != null) {
strbuf.append(ss);
//读全文
} return strbuf.toString(); } //
public String[] input(String str) {
String[] arr = str.split("\\s+"); return arr;
} public void putmap(List<String> ls) {
String temp, theword = null;
int flage = 0;
theword = ls.get(0);
Map<String, Integer> map = new HashMap<String, Integer>();
Iterator it = ls.iterator();
while (it.hasNext()) {
// System.out.println("sss"+it.next().toString());
temp = it.next().toString(); if (temp.equals(theword)) {
flage++;
continue;
} else {
map.put(theword, flage);
flage = 1;
theword = temp; }
} map.put(theword, flage);
//重写比较方法,treemap按值排序。用两个map 比较函数需要参数
ValueComparator bvc = new ValueComparator(map);
Map<String,Integer> map2 = new TreeMap<String,Integer>(bvc);
map2.putAll(map);
Iterator mapit = map2.entrySet().iterator();
while (mapit.hasNext()) {
Entry tr = (Entry) mapit.next(); String num = (String) tr.getKey();
int sa = (Integer) tr.getValue();
System.out.println("this word:"+num + " has:" + sa + "个");
} } // /
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
List<String> ls = new ArrayList<String>(); calwordnum ca = new calwordnum(); String allword = ca.readfile();
String[] arr = ca.input(allword);
for (int i = 0; i < arr.length; i++) { ls.add(arr[i].toLowerCase());
} Collections.sort(ls);
display(ls);
ca.putmap(ls); } @Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return super.equals(obj);
} private static void display(List<String> ls) {
// TODO Auto-generated method stub for (String s : ls)
System.out.println(s);
} }
//
class ValueComparator implements Comparator<String> { Map<String, Integer> base;
public ValueComparator(Map<String, Integer> base) {
this.base = base;
} public int compare(String a, String b) {
if (base.get(a) >=base.get(b)) {
return -1; //注意 不要返回0 会删除重复
} else {
return 1;
}
}
}

不截图了,运行了之后输入文件名就行,如果你的分隔符不是//s+能满足的,麻烦自行修改。出来的结果就是单词,单词个数,有考虑步骤的地方。望批评指正

最新文章

  1. 关于fefo函数
  2. win2003 Enterprise x64 Edtion中的DCOM服务找不到WORD应用程序
  3. 使用zxing生成二维码
  4. servlet中文乱码问题
  5. [转]查看Flash Log输出
  6. Android实现欢迎界面,点击进入应用
  7. EasyUI--messager
  8. lintcode:Matrix Zigzag Traversal 矩阵的之字型遍历
  9. yii学习随感
  10. .net 反射访问私有变量和私有方法
  11. python官方文档
  12. django源码阅读
  13. MFC模态和非模态对话框编程
  14. Python操作Zip文件
  15. 保存单文件为mhtml
  16. dig命令
  17. RK3288 uboot启动流程
  18. 修改sqlserver2008数据库的排序规则 (转)
  19. vue获取DOM元素并设置属性
  20. ftp命令大全

热门文章

  1. matplot 代码实例2
  2. [UE4]崩溃的原因收录
  3. PHP PDO prepare()、execute()和bindParam()方法详解
  4. Eclipse修改workspace目录的几种方式
  5. sencha touch在华为emotion ui 2.0自带浏览器中圆角溢出的bug
  6. concurrent.futures模块
  7. C# 程序A发送Log记录给程序B,程序B处理和分析Log记录
  8. PyQt5系列教程(九)QInputDialog的使用
  9. SQL 2008 启用和禁用xp_cmdshell
  10. Linux SWAP 交换分区配置说明(转)