前言

这是一次补记录,那天接到基友一个临时任务。根据他给的文件,分析并获取CPU天梯榜的分数,然后进行分级。

下面开始我们的思路拆解:

数据处理部分

如果有多份文件,也都是按照这个思路处理。

原始CPU数据:

  1. 首先是excel文件,为每一列添加一个序列seq,并另存为CSV。例如cpu_1020.xlsx另存为cpu_1020.csv
  2. 然后通过navicat的导入向导功能,可以导入为数据库表。cpu_1020表.
  3. 导入后应该是三列信息,可以修改一下字段名为str8c1seq 。添加一个score用于保存天梯分数,添加keyword用于保存关键字提取数据。
  4. 获取对应的DDL语句 CREATE TABLEcpu_1020(str8varchar(255) DEFAULT NULL,c1varchar(255) DEFAULT NULL,seqvarchar(255) DEFAULT NULL,scorevarchar(255) DEFAULT NULL,keywordvarchar(255) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  5. 到 Spring Boot Code Generator 进行转换,可以生成需要的JPA entity和repository等文件。
  6. JPA的话,需要修改seq字段为@Id,str8可能会存在重复或者非法内容,不适合做id,这也就是加seq的原因之一,另一个是方便知道后面排序后的数据是之前文件的第几行,总之还是不错的。

天梯数据部分:

  1. 到新浪APP的CPU性能排名榜http://itianti.sinaapp.com/index.php/cpu 获取记录。
  2. 借助Chrome的F12功能,删除掉不必要的元素,整个topbar,footer,title,titletip,right这五个可以删除掉。然后就得到一个干净的表格了,可以直接copy到excel。
  3. 惯例,加上seq列,处理一下excel文件,保存为csv格式
    10.导入mysql为cpu_rank表,依旧加上keyword,并且到http://java.bejson.com/generator生成为需要的JPA文件。

正则表达式分析:

可以到 正则表达式在线测试工具 进行分析。

根据我对CPU的理解,一般,CPU分为三个阵营,Intel,AMD,VIA(out了)。

然后型号方面,一般都是 i3/5/7-xxxx ,也就是3到10位的数字或者字母或者-。带的后缀,也就是6400T低功耗/6500U低压/9100F无核显/9700K超频/G5600奔腾金牌/P6000奔腾/移动的4610M/4790S节能/3900X(AMD)/4700XM移动高端/E3E5E7的E/打桩机的2990WX/E5-2697A/E5-2618L/Xeon D-2143IT

最后得到一个精华的表达式[F,H,Q,P,E,K,U,S,T,P,M,W,X,A,L,0-9,i-]{3,10}

JAVA部分

提取分析keyword并且保存到数据库表的keyword字段,包括原始数据cpu_1020和CPU天梯表cpu_rank也分析一下。

 @RequestMapping("/deal")public Object dealCpu1(){String patternString = "[F,H,Q,P,E,K,U,S,T,P,M,W,X,A,L,0-9,i-]{3,10}";Pattern pattern = Pattern.compile(patternString);List<Cpu1020> cpuList = cpu1020Repository.findAll();for (Cpu1020 cpu1020:cpuList){if(!StringUtils.isBlank(cpu1020.getStr8())){Matcher matcher = pattern.matcher(cpu1020.getStr8());//System.out.println(cpu1020.getStr8());if(matcher.find()){String name= matcher.group();System.out.println("match->"+name);cpu1020.setKeyword(name);cpu1020Repository.save(cpu1020);}}}return null;}

MYSQL匹配分数部分

处理一下即可。

UPDATE cpu_1020 t1
SET t1.score =(SELECTt2.score FROMcpu_rank t2 WHEREINSTR( t2.keyword, t1.keyword )> 0 ORDER BYLENGTH( t2.keyword ) LIMIT 1 );

优化思路

AMD和Intel的U,型号其实有一小部分是串号的,如果有时间,可以Intel和AMD分开计算,就比较准确了,至于最后一些没有匹配到的坑爹型号则要大致根据类型,去匹配一个差不多的分数了。。。

当然,后来发现原始CPU数据都有问题,所以就需要提前处理一下,有些没用的数据或者错误的非法的数据可以去掉。懒的话也可以后面在count一下没用分数的cpu,然后选择性的处理,删除或者补分数。

JAVA+MYSQL+CSV用正则表达式获取CPU天梯分数相关推荐

  1. java正则 括号_java正则表达式获取大括号小括号内容并判断数字和小数亲测可用...

    获取大括号小括号内容 项目开发用到了,暂做个简单记录 private static String regex = "\\{([^}]*)\\}";//匹配大括号 private s ...

  2. java 正则 大括号_java正则表达式获取大括号之间的内容

    "; String reg2 = " "; System.out.println(test.replaceAll(reg, "###")); Syst ...

  3. java正则 链接_Java正则表达式获取网址和链接文字解析

    很久不写正则表达式了,网上看到个面试题关于提取, 各种乱七八糟的解法. 正确的,应该是这样吧: import java.util.regex.Matcher; import java.util.reg ...

  4. 正则表达式获取CPU的核数信息

    1. 观察CPU文件节点的特征 手机的CPU节点的路径: device:/sys/devices/system/cpu $ ls -al total 0 drwxr-xr-x 19 root root ...

  5. java正则表达式 中括号_Java正则表达式获取中括号之间的内容

    不包含中括号 正则表达式如下: \\[(.*?)] 注: .匹配除换行符\n之外的任何单字符: *匹配前面的子表达式零次或多次: ?匹配前面的子表达式零次或一次: ()标记一个子表达式的开始和结束位置 ...

  6. java 线程 cpu_java程序中线程cpu使用率计算

    最近确实遇到题目上的刚需,也是花了一段时间来思考这个问题. cpu使用率如何计算 计算使用率在上学那会就经常算,不过往往计算的是整个程序执行的时间段,现在突然要实时计算还真有点无奈,时间段如何选择是个 ...

  7. java正则表达式获取指定两个字符串之间内容

    xml解析利用正则表达式获取指定两个字符串之间内容 在遇到解析复杂xml的时候,想到大家所想到的都是利用dom4j作为首发工具,但是当遇到层次很多,较为复杂,我们难道还需要从根节点一层一层的解析下去吗 ...

  8. 用正则表达式和java解析csv文件

    用正则表达式和java解析csv文件 作者:弹着钢琴设计  来源:博客园  发布时间:2009-06-15 18:31  阅读:337 次  原文链接   [收藏]   在解析csv文件之前,先来看看 ...

  9. Java正则表达式获取网页所有网址和链接文字

    /*获取网址首页的所有网址和链接文字*/ import java.io.BufferedReader; import java.io.IOException; import java.io.Input ...

最新文章

  1. Visual Studio 2005 Web Deployment Projects版本不同引发的问题
  2. 爆改古董卡西欧计算器!能联网、能聊天,「作弊神器」只要150块
  3. Android使用XUtils框架上传照片(一张或多张)和文本,server接收照片和文字(无乱码)...
  4. oracle数据库的详细安装,Oracle 11g数据库详细安装图文教程
  5. 时代天使点燃口腔赛道,瑞尔集团离下一只“牙茅”还有多远?
  6. pyqt5从子目录加载qrc文件_【JVM系统学习之路】一篇看懂类加载
  7. 前端老弟第一次写后端,崩了!
  8. 【ExtJS】FormPanel 布局(一)
  9. 适用于ATI卡的GPU计算MD5的小程序源码,基于AMD APP SDK开发
  10. 【Flink】flink zookeeper HA 实现分析
  11. 两个子线程不冲突_多线程操作可见性
  12. mysql修改最大连接数笔记
  13. 在linux上配置telnet服务器,Ubuntu 10.10 下配置Telnet服务器
  14. 0代码实现接口自动化测试-RF框架实践
  15. 动软代码生成器连接8.0.17版本的mysql
  16. 如何正确学习软件工程
  17. DFRobot高精度低功耗数字温湿度传感器SHT40
  18. 银河麒麟桌面版系统-用户密码到期无法正常进入系统解决办法
  19. ghost linux引导修复工具,GhostBSD 19.10 发布,UEFI多重引导的修复
  20. docxtpl使用手册

热门文章

  1. vue中使用 wow.js 动画插件
  2. linux 自动关机 计划任务
  3. git 切换提交账号
  4. Linux系统中获取临时文件路径 `GetTempPath`和`GetTempFileName`函数
  5. 小白のKNN算法理解及代码实现
  6. tp5引入第三方类 实现获取音频(.mp3)文件时长。
  7. python爬虫基础-requests库
  8. 游戏是怎么赚钱的 - 聊聊挖坑
  9. 面试题-关于深拷贝浅拷贝
  10. python练习题(3)——地球数据的计算