java算法面试题:从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序 ;读取docx 读取doc 使用poi 相关jar包提集提供下载
从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序
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包提集提供下载的更多相关文章
- Java算法面试题(史上最强、持续更新、吐血推荐)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- java算法面试题:有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数 按值的降序排序,如果值相同则按键值的字母顺序
package com.swift; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; publi ...
- java算法面试题
前言:线上面试题与大家分享,并记录求职道路的酸甜苦辣,特此留念. 李雷和韩梅梅坐前后排,上课想说话怕被老师发现,所以改为传小纸条.为了不被老师发现他们纸条上说的是啥,他们约定了如下方法传递信息:将26 ...
- java算法面试题:有数组a[n],用java代码将数组元素顺序颠倒
package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.List; ...
- java算法面试题:设计一个快速排序。双路快速排序,简单易于理解。
package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Compar ...
- java算法面试题:排序都有哪几种方法?请列举。用JAVA实现一个快速排序。选择冒泡快速集合至少4种方法排序
package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Compar ...
- 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 ...
- Java算法面试题:编写一个程序,将e:\neck目录下的所有.java文件复制到e:\jpg目录下,并将原来文件的扩展名从.java改为.jpg
package com.swift; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; i ...
- 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 ...
随机推荐
- Java基础笔记(十六)——继承
继承 提取出一些共性特征,作为父类,子类就可以继承父类的这些开放成员,子类再添加自己独有的属性和方法.如果再有类具有这些共同特征,也可继承这个父类. 特点:1.利于代码复用 2.缩短开发周期 ...
- Scrapy(爬虫应用框架)安装配置
运行平台:Windows Python版本:Python3.x 一.Scarpy 简介 Scrapy是一个为了爬取网站数据提取结构性数据而编写的应用框架,可以应用于数据挖掘,信息处理或存储历史数据等一 ...
- ST的MCU系列
一 STM32F1(M3)系列: 超值型系列STM32F100- 24 MHz最高主频 带马达控制和CEC功能 基本型系列STM32F101 - 36 MHz最高主频,具有高达1M字节的片上闪存 U ...
- 在Scala IDEA for Eclipse或IDEA里程序编译实现与在Spark Shell下的对比(其实就是那么一回事)
不多说,直接上干货! 比如,我这里拿主成分分析(PCA). 1.主成分分析(PCA)的概念介绍 主成分分析(PCA) 是一种对数据进行旋转变换的统计学方法,其本质是在线性空间中进行一个基变换,使得变换 ...
- vs2017通过snippet代码片断进行标准化注释
我们在进行团队开发时,类的注释已经可以做到自定义了,详细看上篇文章<vs2017通过模块文件添加自定义注释>,而对于方法的注释,我们也需要完善一下,这里我们用到了“代码片断”插件,VS里有 ...
- 这个五月,我拿到了腾讯暑期offer
前情回顾 本来学校就是双非,如果再没有些亮点,是很难进大厂的. 我比较幸运,曾在网易实习过一段时间,很感谢这段经历,让我有幸通过腾讯HR们的简历筛选. 对于腾讯春招,其实我是没有参加网申(2.28-3 ...
- Spring Junit测试(非web,即不包含Controller测试)
使用Spring-Test对Spring框架进行单元测试 配置过程: lib加入导入spring-test.jar和junit包 或者使用Maven依赖: <dependency> < ...
- JAVA4大线程池
不知不觉中我们电脑的硬件设施越来越好,从双核四线程普及到如今四核八线比比皆是.互联网发展至今,讲究的就是快,less is more,而且大数据的诞生和各种种类繁多的需求处理,单线程的程序逐渐不能满足 ...
- Java8 如何正确使用 Optional
原文出处:https://blog.kaaass.net/archives/764 Optional是Java8提供的为了解决null安全问题的一个API.善用Optional可以使我们代码中很多繁琐 ...
- SpringMVC项目的快速搭建
Spring MVC提供了一个DispatcherServlet来开发Web应用.在Servlet2.5及2以下的时候只要在web.xml下配置<servlet>元素即可. 在Servle ...