java8写一个word count

mac2022-06-30  27

题目背景

很多了解过大数据编程的基础的人都知道一个入门级程序:word count。

其计算思路是,将一串文本(一般都是英文文章),在java中表现出来就是一个字符串或者是一个文本(txt文件)。

该题是计算该字符串中相同单词的个数并打印出来。

java8解决方案

package org.feng.stream; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Arrays; import java.util.stream.Collectors; import java.util.stream.Stream; /** * Created by Feng on 2019/10/4 14:58 * CurrentProject's name is java8 */ public class WordCountDemo { public static void main(String[] args) { // 文件生成流 // 遍历每一个单词出现的次数(简单的使用空格切割) // 读取txt文件;设置编码格式 try(Stream<String> lines = Files.lines(Paths.get("resources/hello.txt"), Charset.defaultCharset())){ // 将英文逗号、句号、感叹号全部替换为空格字符串 lines.map(str -> str.replaceAll("[,]|[.]|[!]"," ")) // 按照空格切割字符串 .flatMap(line -> Arrays.stream(line.split(" "))) // 过滤掉包含的空字符串 .filter(str -> !"".equals(str)) // 使用String的toString方法,获取单词作为map的键;计算个数作为值 .collect(Collectors.groupingBy(String::toString, Collectors.counting())) // 遍历Map<String, Integer> .forEach((k,v)->{ System.out.println("k="+k+",v="+v); }); } catch (IOException e) { e.printStackTrace(); } } }

测试文档txt

Hello everyone! my name is feng jin song. I am come from xi'an, i like play pingpong and computer games. Three month ago,i was leave my university life. when i walked on the street, i always want see anyone who named xxx. i also like java.

控制台输出

k=play,v=1 k=named,v=1 k=university,v=1 k=ago,v=1 k=xi'an,v=1 k=I,v=1 k=when,v=1 k=life,v=1 k=jin,v=1 k=see,v=1 k=computer,v=1 k=java,v=1 k=Hello,v=1 k=street,v=1 k=leave,v=1 k=and,v=1 k=feng,v=1 k=games,v=1 k=from,v=1 k=on,v=1 k=always,v=1 k=song,v=1 k=like,v=2 k=everyone,v=1 k=want,v=1 k=was,v=1 k=i,v=5 k=also,v=1 k=come,v=1 k=is,v=1 k=am,v=1 k=my,v=2 k=pingpong,v=1 k=Three,v=1 k=the,v=1 k=walked,v=1 k=month,v=1 k=anyone,v=1 k=name,v=1 k=xxx,v=1 k=who,v=1 Process finished with exit code 0

总结

这个程序而言,使用的是java8中的Stream接口和Collectors工具接口。他们的组合是很强大的。值得我们去学习。

 

 

 

 

最新回复(0)