有些时候我们会有一个需求,就是从一段中英文混合的文本中把所有的英文单词统计出来,例如如下的一段话:
“2.精通spring boot,spring cloud,struts2等框架,有微服务,微应用的开发与实施经验;3.对大数据有一定的了解,熟悉j2ee、hadoop、kafka、spark、elasticsearch,hbase等大数据相关技术及框架;4.熟悉oracle,postgresql,mysql,redis等数据库相关技术;5.熟悉Vue、Webpack、Node.js、ElementUI、Jqurey、Ajax、json、git/svn等,有一定的Vue前端开发项目经验;”
在这段话里,如果我们需要把其中所有的英文单词统计出来,从而来统计一下各种技术的出现频率的话,应该怎么做呢?
很显然,这种情况最容易的方法应该就是神器正则表达式了。
正则表达式无疑是解决这类问题最简单的方法了。那么我们来看一看,如果用正则表达式的话,这个问题应该怎么解决。
首先我们注意到,有些技术的名字中间是有空格的,类似于spring boot、spring cloud等,这种情况我们显然不能把它们分成两个单词。另外还有一些是中间或末尾带数字的。另外还有一个Node.js是中间带句点的。
考虑到这些情况之后,我们可以写出一种能够匹配以上所有技术名称的正则表达式了,如下所示:
[A-Za-z][A-Za-z0-9_\\s\\.]*[A-Za-z0-9_]*
最终,我们的代码如下:
HashMapresult =newHashMap
String data = "2.精通spring boot,spring cloud,struts2等框架,"
+ "有微服务,微应用的开发与实施经验;3.对大数据有一定的了解,"
+ "熟悉j2ee、hadoop、kafka、spark、elasticsearch,"
+ "hbase等大数据相关技术及框架;4.熟悉oracle,postgresql,"
+ "mysql,redis等数据库相关技术;5.熟悉Vue、Webpack、"
+ "Node.js、ElementUI、Jqurey、Ajax、json、git、svn等,"
+ "有一定的Vue前端开发项目经验;";
String regex = "[A-Za-z][A-Za-z0-9_\\s\\.]*[A-Za-z0-9_]*";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(data);
System.out.println("Words in the given String: ");
while(matcher.find()) {
if(result.get(matcher.group()) !=null)
result.put(matcher.group(), result.get(matcher.group()) + 1);
else
result.put(matcher.group(), 1);
System.out.println(result);
输出结果如下:
Words in the given String:
{oracle=1, spring cloud=1, Vue=2, Node.js=1, svn=1, Jqurey=1, redis=1, spring boot=1, struts2=1, git=1, elasticsearch=1, postgresql=1, spark=1, kafka=1, j2ee=1, ElementUI=1, json=1, mysql=1, hadoop=1, Webpack=1, hbase=1, Ajax=1}
可见,该正则表达式完整地输出了所有的技术名称。不过这个正则表达式并不简洁,如果读者们有更简洁的表达方式的话,欢迎私信或留言哦。
喜欢本文的话,欢迎关注活在信息时代哦:)
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.