使用Scanner类和正则表达式统计一篇英文中的单词,要求如下:
1、一共出现了多少个单词。
2、有多少个互不相同的单词。
3、按单词出现的频率大小输出单词。
package 第七次;
import java.util.*;
import java.io.*;
import java.util.regex.*;
public class word {
public static void main(String[] args) {
String inputFile = "src/java线上作业/第三章/crossion.txt";// 读取输入文件
Map<String,Integer> wordIndex = new HashMap<>();
//设置set集合来存放已经出现的单词
Set<String> Words = new HashSet<>();
//单词计数器
int count =0;
//互不相同单词出现的次数
int uncount =0;
//定义集合用于存放互不相同的单词
Map<Integer,String> dict;
try (BufferedReader reader = new BufferedReader(new FileReader(inputFile))) {//new一个BufferedReader对象,将文件内容读取到缓存
String line;
while ((line = reader.readLine()) != null) {
//读取无论是大写还是小写的单词
Pattern pattern = Pattern.compile("[A-Za-z][A-Za-z-]*");//正则表达式,按先大写后小写
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
String word = matcher.group().toLowerCase();// 将单词转换为小写
wordIndex.put(word,wordIndex.getOrDefault(word,0)+1);
count++;
//输出不相同的单词,
if(!Words.contains(word)){
dict = new HashMap<>();
dict.put(count,word);
//3、将互不相同的单词以集合的方式输出
System.out.println(dict);
//将出现过的单词添加到集合中
Words.add(word);
uncount++;
}
}
}
//1、互不相同单词出现的次数
System.out.print("不相同的单词次数:"+uncount);
//2、单词出现的数量
System.out.print("单词出现的数量:"+count);
}
catch (IOException e) {
e.printStackTrace();
}
//计算不同单词出现的次数
List<Map.Entry<String, Integer>> sortedWords = new ArrayList<>(wordIndex.entrySet());
Collections.sort(sortedWords, Map.Entry.<String, Integer>comparingByValue().reversed());
for (Map.Entry<String, Integer> entry : sortedWords) {
int countvalue = Integer.valueOf(entry.getValue());
//输出
System.out.println("单词出现的频率:"+entry.getKey() + ": " + countvalue*0.01+"%");
}
}
}
原文地址:https://blog.csdn.net/zyzgzyrmzsj/article/details/134701873
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_32518.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。