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

1,张三,28

2,李四,35

3,张三,28

4,王五,35

5,张三,28

6,李四,35

7,赵六,28

8,田七,35

  1. package com.swift;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. import java.util.ArrayList;
  7. import java.util.Collections;
  8. import java.util.Comparator;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.Map.Entry;
  12. import java.util.TreeMap;
  13.  
  14. import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
  15. import org.apache.poi.xwpf.usermodel.XWPFDocument;
  16.  
  17. public class IO_Sort_Select {
  18.  
  19. public static void main(String[] args) throws IOException {
  20. /*
  21. * 从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序
  22. */
  23. File file_s = new File("e:\\neck\\data.docx");
  24. File dir = new File("e:\\neck");
  25. if (!dir.exists() && dir.isDirectory()) {
  26. System.out.println("目录不存在,即将创建...");
  27. dir.mkdirs();
  28. }
  29. File file_t = new File(dir, "data.txt");
  30.  
  31. List<String> list = new ArrayList<String>();
  32. String text = readFromDocx(file_s);
  33. String[] hang = text.split("\\n");
  34. for (int i = 0; i < hang.length; i++) {
  35. String[] lie = hang[i].split("\\,");
  36. for (int j = 0; j < lie.length; j++) {
  37. if (j == 1) {
  38. list.add(lie[j]);
  39. }
  40. }
  41.  
  42. }
  43. printList(list);
  44.  
  45. Map<String, Integer> map = new TreeMap<String, Integer>();
  46. for (String str : list) {
  47. map.put(str, 0);
  48. }
  49. for(String str:list) {
  50. if(map.containsKey(str)) {
  51. int num=map.get(str);
  52. num++;
  53. map.remove(str);
  54. map.put(str, num);
  55. }
  56. }
  57. List<Entry<String,Integer>> listMap=new ArrayList<Entry<String,Integer>>(map.entrySet());
  58. Collections.sort(listMap, new Comparator<Entry<String,Integer>>(){
  59.  
  60. @Override
  61. public int compare(Entry<String, Integer> arg0, Entry<String, Integer> arg1) {
  62. int num=arg1.getValue()-arg0.getValue();
  63. return num==0?arg0.getKey().compareTo(arg1.getKey()):num;
  64. }
  65. });
  66.  
  67. for(Entry<String, Integer> entry:listMap) {
  68. System.out.println("重复的姓名是 :"+entry.getKey()+" 重复的次数是:"+entry.getValue());
  69. }
  70. }
  71.  
  72. private static void printList(List<String> list) {
  73. for (String str : list) {
  74. System.out.println(str);
  75. }
  76. }
  77.  
  78. public static String readFromDocx(File file) throws IOException {
  79.  
  80. FileInputStream fis = new FileInputStream(file);
  81. XWPFDocument docx = new XWPFDocument(fis);
  82. XWPFWordExtractor extractor = new XWPFWordExtractor(docx);
  83. String text = extractor.getText();
  84. return text;
  85.  
  86. }
  87.  
  88. }

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

解析的jar包如下图

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

下载地址:

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

下面是读取doc的方法

  1. package com.swift;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. import java.util.ArrayList;
  7. import java.util.Collections;
  8. import java.util.Comparator;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.Map.Entry;
  12. import java.util.TreeMap;
  13.  
  14. import org.apache.poi.hwpf.HWPFDocument;
  15. import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
  16. import org.apache.poi.xwpf.usermodel.XWPFDocument;
  17.  
  18. public class IO_Sort_Select {
  19.  
  20. public static void main(String[] args) throws IOException {
  21. /*
  22. * 从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序
  23. */
  24. File file_s = new File("e:\\neck\\data.doc");
  25. File dir = new File("e:\\neck");
  26. if (!dir.exists() && dir.isDirectory()) {
  27. System.out.println("目录不存在,即将创建...");
  28. dir.mkdirs();
  29. }
  30.  
  31. List<String> list = new ArrayList<String>();
  32. String text = readFromDoc(file_s);
  33. String[] hang = text.split("\\r");
  34. for (int i = 0; i < hang.length; i++) {
  35. System.out.println(hang.length);
  36. System.out.println(hang[i]);
  37. String[] lie = hang[i].split("\\,");
  38. for (int j = 0; j < lie.length; j++) {
  39. if (j == 1) {
  40. list.add(lie[j]);
  41. }
  42. }
  43. }
  44. printList(list);
  45.  
  46. Map<String, Integer> map = new TreeMap<String, Integer>();
  47. for (String str : list) {
  48. map.put(str, 0);
  49. }
  50. for(String str:list) {
  51. if(map.containsKey(str)) {
  52. int num=map.get(str);
  53. num++;
  54. map.remove(str);
  55. map.put(str, num);
  56. }
  57. }
  58. List<Entry<String,Integer>> listMap=new ArrayList<Entry<String,Integer>>(map.entrySet());
  59. Collections.sort(listMap, new Comparator<Entry<String,Integer>>(){
  60.  
  61. @Override
  62. public int compare(Entry<String, Integer> arg0, Entry<String, Integer> arg1) {
  63. int num=arg1.getValue()-arg0.getValue();
  64. return num==0?arg0.getKey().compareTo(arg1.getKey()):num;
  65. }
  66. });
  67.  
  68. for(Entry<String, Integer> entry:listMap) {
  69. System.out.println("重复的姓名是 :"+entry.getKey()+" 重复的次数是:"+entry.getValue());
  70. }
  71. }
  72.  
  73. private static void printList(List<String> list) {
  74. for (String str : list) {
  75. System.out.println(str);
  76. }
  77. }
  78.  
  79. public static String readFromDocx(File file) throws IOException {
  80.  
  81. FileInputStream fis = new FileInputStream(file);
  82. XWPFDocument docx = new XWPFDocument(fis);
  83. XWPFWordExtractor extractor = new XWPFWordExtractor(docx);
  84. String text = extractor.getText();
  85. return text;
  86. }
  87. public static String readFromDoc(File file) throws IOException {
  88.  
  89. FileInputStream fis = new FileInputStream(file);
  90. HWPFDocument doc = new HWPFDocument(fis);
  91. String text = doc.getDocumentText();
  92. return text;
  93. }
  94.  
  95. }

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. Java基础笔记(十六)——继承

    继承 提取出一些共性特征,作为父类,子类就可以继承父类的这些开放成员,子类再添加自己独有的属性和方法.如果再有类具有这些共同特征,也可继承这个父类. 特点:1.利于代码复用     2.缩短开发周期 ...

  2. Scrapy(爬虫应用框架)安装配置

    运行平台:Windows Python版本:Python3.x 一.Scarpy 简介 Scrapy是一个为了爬取网站数据提取结构性数据而编写的应用框架,可以应用于数据挖掘,信息处理或存储历史数据等一 ...

  3. ST的MCU系列

    一 STM32F1(M3)系列: 超值型系列STM32F100-  24 MHz最高主频 带马达控制和CEC功能 基本型系列STM32F101 - 36 MHz最高主频,具有高达1M字节的片上闪存 U ...

  4. 在Scala IDEA for Eclipse或IDEA里程序编译实现与在Spark Shell下的对比(其实就是那么一回事)

    不多说,直接上干货! 比如,我这里拿主成分分析(PCA). 1.主成分分析(PCA)的概念介绍 主成分分析(PCA) 是一种对数据进行旋转变换的统计学方法,其本质是在线性空间中进行一个基变换,使得变换 ...

  5. vs2017通过snippet代码片断进行标准化注释

    我们在进行团队开发时,类的注释已经可以做到自定义了,详细看上篇文章<vs2017通过模块文件添加自定义注释>,而对于方法的注释,我们也需要完善一下,这里我们用到了“代码片断”插件,VS里有 ...

  6. 这个五月,我拿到了腾讯暑期offer

    前情回顾 本来学校就是双非,如果再没有些亮点,是很难进大厂的. 我比较幸运,曾在网易实习过一段时间,很感谢这段经历,让我有幸通过腾讯HR们的简历筛选. 对于腾讯春招,其实我是没有参加网申(2.28-3 ...

  7. Spring Junit测试(非web,即不包含Controller测试)

    使用Spring-Test对Spring框架进行单元测试 配置过程: lib加入导入spring-test.jar和junit包 或者使用Maven依赖: <dependency> < ...

  8. JAVA4大线程池

    不知不觉中我们电脑的硬件设施越来越好,从双核四线程普及到如今四核八线比比皆是.互联网发展至今,讲究的就是快,less is more,而且大数据的诞生和各种种类繁多的需求处理,单线程的程序逐渐不能满足 ...

  9. Java8 如何正确使用 Optional

    原文出处:https://blog.kaaass.net/archives/764 Optional是Java8提供的为了解决null安全问题的一个API.善用Optional可以使我们代码中很多繁琐 ...

  10. SpringMVC项目的快速搭建

    Spring MVC提供了一个DispatcherServlet来开发Web应用.在Servlet2.5及2以下的时候只要在web.xml下配置<servlet>元素即可. 在Servle ...