近期帮老师的一位朋友做了数据处理,表格为1985-2014年的电子信息产业、汽车产业和装备制造产业的所有专利(申请号,分类号,申请人等等),其中申请号和分类号需要处理,通过处理生成其是否为融合性专利以及时间。然后统计为每年融合性专利的数量。

第一步,对Excel表名字及页面进行处理,方便循环迭代。我是尽量把每个表切成2MB大小,大概5W条数据左右吧,因为太大了会跑的很慢,一个3MB的表格处理需要16分钟,但是2MB的仅需4分左右。

第二步,在eclipse中导入poi包,因为表格是2007版的,一个poi包是不能对excel表处理的,需要导入四个包。

第三步,编写程序,实现算法,处理完的数据放入txt文件中,用逗号作为分隔符。

第四步,从mysql workbench中导入txt文件到表中

第五步,通过SQL语句去重,并统计所需要的数据

第三步:

主要用到了正则表达式pattern的基本用法,通过Pattern.complie.matcher()的find(start)方法,挑出所需要的数据

package 三大产业数据;

import java.io.BufferedWriter;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.openxml4j.opc.OPCPackage;

import org.apache.poi.xssf.eventusermodel.XSSFReader;

import org.apache.poi.xssf.model.SharedStringsTable;

import org.apache.poi.xssf.usermodel.XSSFCell;

import org.apache.poi.xssf.usermodel.XSSFRow;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.xml.sax.ContentHandler;

import org.xml.sax.InputSource;

import org.xml.sax.XMLReader;

import org.xml.sax.helpers.XMLReaderFactory;

public class test1 {

//得到专利的年份

public static int getYear(String s1) {

int a=((int)(s1.charAt(2))-(int)'0')*10+((int)(s1.charAt(3))-(int)'0');

if(a>=85 && a<=99)

a=a+1900;

else if(a>=0&& a<=3)

a=a+2000;

else if(a==20)

a=((int)(s1.charAt(2))-(int)'0')*1000+((int)(s1.charAt(3))-(int)'0')*100+((int)(s1.charAt(4))-(int)'0')*10+((int)(s1.charAt(5))-(int)'0');

return a;

}

public static String patternString(String s) {

String pattern = "[A-Z]\\d\\d[A-Z]";

String s1="";

int i=0;

Pattern p = Pattern.compile(pattern);

Matcher m = p.matcher(s);

while (m.find(i)) {

s1=s1+m.group()+";";

i=m.end()+1;

if(i>s.length())

break;

}

if(s1!="")

s1=s1.substring(0, s1.length()-1);

else

s1="";

return s1;

}

//判断是否为融合专利

private static int isBlend(String a) {

String d=patternString(a);

String []s = d.split("\\;");

int index=0;

int j;

//查看是否有不同专利

for(j=0;j

第四步第五步,SQL代码如下

Load Data InFile 'E:/Data/38.txt' Into Table `equipment` fields terminated by ',' lines terminated by '\r\n';

insert into bus select applyID,classifyID,realDate,blendIndex from temp8 group by applyID;

select realDate,count(blendIndex) from bus where blendIndex=1 group by realDate;

我后来做了大量的数据处理工作,强烈大家用python去做,因为真的很方便,numpy,pandas等模块真的很强大。能用库函数的尽量不要自己去写,因为库函数都是做过优化的。

关于同一段代码处理2MB和3MB的excel表的时间差问题的话,是因为我在代码中频繁使用了加法连接字符串,效率底下,因为会频繁的拷贝字符串和分配内存,比较耗时。大家可以考虑用别的方法去做。例如python中,先把字符串存为列表,然后用''.join(list)的方法,速度会快很多。

java 实现 excel 去重_用java对大量Excel表处理(去重,生成新属性,统计数量)相关推荐

  1. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  2. java中读取excel数据类型_在Java中读取Excel文件的内容

    利用JExcelApi来动态生成excel文档 首先,请到http://www.andykhan.com/jexcelapi/index.html下载java excel api,主页上同时有比较详细 ...

  3. java是什么格式_是java格式

    错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...

  4. java ee开发环境_设置Java EE 6开发环境

    java ee开发环境 本教程简要说明了如何设置典型的环境来开发基于Java EE 6的应用程序. 除了可以正常工作的Windows XP客户端具有足够的CPU能力和内存外,本教程没有其他先决条件. ...

  5. java集合类详解_【Java入门提高篇】Day20 Java集合类详解(三)List接口

    今天要说的是Collection族长下的三名大将之一,List,Set,Queue中的List,它们都继承自Collection接口,所以Collection接口的所有操作,它们自然也是有的. Lis ...

  6. JAVA redis缓存过期_失效java服务器

    Java 并发/多线程教程--4并发模型 本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平 ...

  7. java中 jacob作用_【JAVA】JACOB使用简介

    它允许在java中调用com接口自动组件,它使用JNI(本地调用程序)来进行本地调用COM库.它可运行在x86和支持32位和64位Java虚拟机 X64的环境. 测试源码包: 密码: ej9u JAC ...

  8. java 爬虫 请求头_得到java头

    Linux下JNI调用简单实例操作全过程 开发环境:Linux(Ubuntu 11.04) + JDK 7 实例说明:利用JNI调用本地代码的方法来实现一个计算Int数组总和的功能 使用JNI调用本地 ...

  9. java注解的开发_使用Java注解开发自动生成SQL

    使用注解开发的好处就是减少配置文件的使用.在实际过程中,随着项目越来越复杂,功能越来越多,会产生非常多的配置文件.但是,当配置文件过多,实际维护过程中产生的问题就不容易定位,这样就会徒劳的增加工作量. ...

  10. 广东java工资一般多少_广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少...

    广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少 首页 > java > 广东java工资待遇 作者:镀金池   发布时间:2018-12-22 11:20 在 ...

最新文章

  1. Visual Studio 2015 Community连接到Mysql
  2. linux如何安装eclipse
  3. (1)kendo UI使用基础介绍与问题整理——简单说明
  4. spring mvc学习(10):eclipse的环境前maven配置
  5. BAT老程序员分享:Linux C/C++ 开发程序员的黄金方向和学习路线!
  6. S5PV210的内存映射
  7. Python批量检查docx文档中文本框的内容是否正确
  8. EOS小白学习(四)使用http请求EOS节点
  9. php是日元吗,PHP to JPY
  10. CPU指令系统寻址方式
  11. 漫威超级英雄大全(一)
  12. 信息安全风险评估学习笔记
  13. YOLO V5 实现课堂行为检测
  14. Cint() , int(),round() , fix() 的区别与联系
  15. Coprime Triples——CodeChef - COPRIME3
  16. 华为P30震撼来袭!刘海屏+麒麟980+3650mAh,网友直呼:年度机皇呀
  17. upx壳的一些简单脱壳,望大牛勿喷。
  18. 安卓app之按键美化
  19. linux环境下ps命令行,Linux系统ps命令详解:查看正在运行的进程
  20. java创建对象的过程详解

热门文章

  1. Tensorrt7踩坑记录
  2. lintcode算法-3 983 · 棒球游戏
  3. 每日英语--Week10
  4. css 设置冻结表格头,固定/冻结行表头、列表头的做法
  5. UDA/语义分割-ColorMapGAN: Unsupervised Domain Adaptation for Semantic Segmentation Using Color Mapping G
  6. Excel表格中无法中间插入新行列! 提示:在当前工作表的最后一行或列中,存在非空单元格,解决方案
  7. CQF笔记Primer金融基础
  8. 把你的 Mac 从 Catalina 降级回 Mojave 系统的避坑指南
  9. 断网重启路由器就好_电脑断网重启路由器就好了怎么回事
  10. [FROM WOJ]#4479 长跑