是一个统计文件中单词个数,并按照个数从大到小输出的。输入文件名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+能满足的,麻烦自行修改。出来的结果就是单词,单词个数,有考虑步骤的地方。望批评指正

kwic--Java统计单词个数并按照顺序输出的更多相关文章

  1. Java实现 蓝桥杯VIP 算法训练 统计单词个数

    题目描述 给出一个长度不超过200的由小写英文字母组 成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份 (1< k< =40),且每份中 ...

  2. 第六章第一个linux个程序:统计单词个数

    第六章第一个linux个程序:统计单词个数 从本章就开始激动人心的时刻——实战,去慢慢揭开linux神秘的面纱.本章的实例是统计一片文章或者一段文字中的单词个数.  第 1 步:建立 Linu x 驱 ...

  3. 第六章 第一个Linux驱动程序:统计单词个数

    现在进入了实战阶段,使用统计单词个数的实例让我们了解开发和测试Linux驱动程序的完整过程.第一个Linux驱动程序是统计单词个数. 这个Linux驱动程序没有访问硬件,而是利用设备文件作为介质与应用 ...

  4. NOIP200107统计单词个数

    NOIP200107统计单词个数 难度级别: A: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 给出一个长度不超过200的由 ...

  5. NOIP2001 统计单词个数

    题三 统计单词个数(30分) 问题描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k&l ...

  6. Codevs_1040_[NOIP2001]_统计单词个数_(划分型动态规划)

    描述 http://codevs.cn/problem/1040/ 与Codevs_1017_乘积最大很像,都是划分型dp. 给出一个字符串和几个单词,要求将字符串划分成k段,在每一段中求共有多少单词 ...

  7. luogu P1026 统计单词个数

    题目链接 luogu P1026 统计单词个数 题解 贪心的预处理母本串从i到j的最大单词数 然后dp[i][j] 表示从前i个切了k次最优解 转移显然 代码 #include<cstdio&g ...

  8. Codevs 1040 统计单词个数

    1040 统计单词个数 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个长度不超过200的 ...

  9. codevs1040统计单词个数(区间+划分型dp)

    1040 统计单词个数 2001年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 给出一个长度不超 ...

随机推荐

  1. Missing Number @leetcode

    Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...

  2. Dance GAN 迁移不同视频中人物动作的方法

    该研究提出一种迁移不同视频中人物动作的方法.给出两个视频,一个视频中是研究者想要合成动作的目标人物,另一个是被迁移动作的源人物,研究者通过一种基于像素的端到端流程在人物之间进行动作迁移(motion ...

  3. 现在的 Linux 内核和 Linux 2.6 的内核有多大区别?

    作者:larmbr宇链接:https://www.zhihu.com/question/35484429/answer/62964898来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  4. 基于Linux的Samba开源共享解决方案测试(五)

    对于客户端的网络监控如图: 双NAS网关50Mb码率视音频文件的稳定写测试结果如下: 100Mb/s负载性能记录 NAS网关资源占用 稳定写 稳定写 CPU空闲 内存空闲 网卡占用 NAS1 16个稳 ...

  5. Elasticsearch 全文搜索和keyword search字段的mapping定义

    在ES5.0之前我们对于需要keyword search的字段都是这样定义的: { "field name":{ "type": "string&qu ...

  6. Python分页转Mybatis pagehelper格式分页

    最近工作里遇到一个需求要把之前用Java写的一个http接口替换成用Python写的,出参是带了mybatis pageHelper中PageInfo信息的一个JSON串,而Python这边分页不会涉 ...

  7. selenium+python自动化95-弹出框死活定位不到

    前言 部分小伙伴学了selenium的alert后,就不管啥弹出框都去用alert,这是行不通的,看到弹出框,先要确定是不是alert,是才能用,不是的话肯定不能用. 有些弹出框是div层,这种跟平常 ...

  8. UVA127

    模拟游戏,规则如下把卡牌一张接一张,从左到右依次摊开,不可以重叠,每当某张卡片和左边(左边第三张)卡片匹配,它就能放到另外一张卡片上,匹配的规则是他们有一样的级别或者花色,在每次移动完成以后,还需要再 ...

  9. [Illuminate\Database\QueryException] SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using pas sword: NO) (SQL: select * from information_schema.tables where table_schema = la

    [Illuminate\Database\QueryException] SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost ...

  10. 9.求背景图片左边到#box盒子左边外框侧的距离

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...