从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序

1,张三,28

2,李四,35

3,张三,28

4,王五,35

5,张三,28

6,李四,35

7,赵六,28

8,田七,35

package com.swift;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap; import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument; public class IO_Sort_Select { public static void main(String[] args) throws IOException {
/*
* 从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序
*/
File file_s = new File("e:\\neck\\data.docx");
File dir = new File("e:\\neck");
if (!dir.exists() && dir.isDirectory()) {
System.out.println("目录不存在,即将创建...");
dir.mkdirs();
}
File file_t = new File(dir, "data.txt"); List<String> list = new ArrayList<String>();
String text = readFromDocx(file_s);
String[] hang = text.split("\\n");
for (int i = 0; i < hang.length; i++) {
String[] lie = hang[i].split("\\,");
for (int j = 0; j < lie.length; j++) {
if (j == 1) {
list.add(lie[j]);
}
} }
printList(list); Map<String, Integer> map = new TreeMap<String, Integer>();
for (String str : list) {
map.put(str, 0);
}
for(String str:list) {
if(map.containsKey(str)) {
int num=map.get(str);
num++;
map.remove(str);
map.put(str, num);
}
}
List<Entry<String,Integer>> listMap=new ArrayList<Entry<String,Integer>>(map.entrySet());
Collections.sort(listMap, new Comparator<Entry<String,Integer>>(){ @Override
public int compare(Entry<String, Integer> arg0, Entry<String, Integer> arg1) {
int num=arg1.getValue()-arg0.getValue();
return num==0?arg0.getKey().compareTo(arg1.getKey()):num;
}
}); for(Entry<String, Integer> entry:listMap) {
System.out.println("重复的姓名是 :"+entry.getKey()+" 重复的次数是:"+entry.getValue());
}
} private static void printList(List<String> list) {
for (String str : list) {
System.out.println(str);
}
} public static String readFromDocx(File file) throws IOException { FileInputStream fis = new FileInputStream(file);
XWPFDocument docx = new XWPFDocument(fis);
XWPFWordExtractor extractor = new XWPFWordExtractor(docx);
String text = extractor.getText();
return text; } }

上面代码读取的是docx的word文件,直接读取会出现乱码,因word中不仅有文本还有压缩的其他属性等内容,所以要使用poi的jar包进行解析

解析的jar包如下图

这个应该比较全面了,也可以解析excel操作或写入表格等

下载地址:

链接: https://pan.baidu.com/s/1htYPKLA 密码: e36e

下面是读取doc的方法

package com.swift;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap; import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument; public class IO_Sort_Select { public static void main(String[] args) throws IOException {
/*
* 从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序
*/
File file_s = new File("e:\\neck\\data.doc");
File dir = new File("e:\\neck");
if (!dir.exists() && dir.isDirectory()) {
System.out.println("目录不存在,即将创建...");
dir.mkdirs();
} List<String> list = new ArrayList<String>();
String text = readFromDoc(file_s);
String[] hang = text.split("\\r");
for (int i = 0; i < hang.length; i++) {
System.out.println(hang.length);
System.out.println(hang[i]);
String[] lie = hang[i].split("\\,");
for (int j = 0; j < lie.length; j++) {
if (j == 1) {
list.add(lie[j]);
}
}
}
printList(list); Map<String, Integer> map = new TreeMap<String, Integer>();
for (String str : list) {
map.put(str, 0);
}
for(String str:list) {
if(map.containsKey(str)) {
int num=map.get(str);
num++;
map.remove(str);
map.put(str, num);
}
}
List<Entry<String,Integer>> listMap=new ArrayList<Entry<String,Integer>>(map.entrySet());
Collections.sort(listMap, new Comparator<Entry<String,Integer>>(){ @Override
public int compare(Entry<String, Integer> arg0, Entry<String, Integer> arg1) {
int num=arg1.getValue()-arg0.getValue();
return num==0?arg0.getKey().compareTo(arg1.getKey()):num;
}
}); for(Entry<String, Integer> entry:listMap) {
System.out.println("重复的姓名是 :"+entry.getKey()+" 重复的次数是:"+entry.getValue());
}
} private static void printList(List<String> list) {
for (String str : list) {
System.out.println(str);
}
} public static String readFromDocx(File file) throws IOException { FileInputStream fis = new FileInputStream(file);
XWPFDocument docx = new XWPFDocument(fis);
XWPFWordExtractor extractor = new XWPFWordExtractor(docx);
String text = extractor.getText();
return text;
}
public static String readFromDoc(File file) throws IOException { FileInputStream fis = new FileInputStream(file);
HWPFDocument doc = new HWPFDocument(fis);
String text = doc.getDocumentText();
return text;
} }

doc读取出来的文本还不能用"\\n"进行行分割,用的是"\\r"才行,要不然只能分割出1行,这点注意,要不会觉得程序莫名其妙不安自己的思路走

java算法面试题:从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序 ;读取docx 读取doc 使用poi 相关jar包提集提供下载的更多相关文章

  1. Java算法面试题(史上最强、持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  2. java算法面试题:有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数 按值的降序排序,如果值相同则按键值的字母顺序

    package com.swift; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; publi ...

  3. java算法面试题

    前言:线上面试题与大家分享,并记录求职道路的酸甜苦辣,特此留念. 李雷和韩梅梅坐前后排,上课想说话怕被老师发现,所以改为传小纸条.为了不被老师发现他们纸条上说的是啥,他们约定了如下方法传递信息:将26 ...

  4. java算法面试题:有数组a[n],用java代码将数组元素顺序颠倒

    package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.List; ...

  5. java算法面试题:设计一个快速排序。双路快速排序,简单易于理解。

    package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Compar ...

  6. java算法面试题:排序都有哪几种方法?请列举。用JAVA实现一个快速排序。选择冒泡快速集合至少4种方法排序

    package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Compar ...

  7. java算法面试题:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个, 如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。

    package com.swift; import java.util.Scanner; public class Hanzi_jiequ { public static void main(Stri ...

  8. Java算法面试题:编写一个程序,将e:\neck目录下的所有.java文件复制到e:\jpg目录下,并将原来文件的扩展名从.java改为.jpg

    package com.swift; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; i ...

  9. java算法面试题:编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。

    package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...

随机推荐

  1. 再看thinkphp5分页类使用

    之前使用tp5的分页paginate类时只用到了第一个参数,也就是每页显示多少行 今天又仔细看了下手册和paginate类,发现paginate可传入的参数有很多,可以满足更多需求 比如可以指定分页的 ...

  2. 关于Spring @RequestBody 自动映射模型原理

    关于Spring @RequestBody 自动映射模型 2016年10月18日 22:17:12 稻子丶 阅读数:5049   在很多时候,Spring的注解为我们提供了很多方便,但只知道其用法,不 ...

  3. dpkg dependency problems prevent configuration

    dpkg: dependency problems prevent configuration of cr3: cr3 depends on libpng12-0 (>= 1.2.13-4); ...

  4. pat1099. Build A Binary Search Tree (30)

    1099. Build A Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...

  5. <s:property>的用法

    1,访问Action值栈中的普通属性: <s:property value="attrName"/> 2,访问Action值栈中的对象属性(要有get set方法):  ...

  6. spring MVC之注解开发控制器(二)

    开发表单控制器 在传统的Spring MVC开发方法中,是通过扩展SimpleFormController类来创建简单的表单控制器.这样就定义了基本的表单处理流程,并允许通过覆盖几个生命周期方法来定制 ...

  7. 自定义控件使用GDI+绘制旋转Label文字

    http://www.cnblogs.com/CUIT-DX037/ 1.添加用户控件: 2.添加代码: public partial class UcLabel : UserControl { pu ...

  8. 【转】sql server数据库操作大全——常用语句/技巧集锦/经典语句

    本文为累计整理,有点乱,凑合着看吧! ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ ☆ ☆ ☆ sql 宝 典 ☆ ☆ ☆ 2012年-8月 修订版 ☆ ...

  9. springcloud中servcie层调用fegin异常以及异步方法的实现

    近日在做业务上的短信推送和APP消息推送,通过调用别的模块的接口来实现,在springcloud中通过fegin进行调用.这里要说明的事情并不是如何开发推送功能,而是在调试过程中碰到的一些小问题.我把 ...

  10. RabbitMQ:消息发送确认 与 消息接收确认(ACK)

    默认情况下如果一个 Message 被消费者所正确接收则会被从 Queue 中移除 如果一个 Queue 没被任何消费者订阅,那么这个 Queue 中的消息会被 Cache(缓存),当有消费者订阅时则 ...