首页 > 编程语言 >Java语言程序设计实验题目:编写Java程序统计一篇英文文档中各单词出现的次数,并按单词出现的频率由高到低进行输出。

Java语言程序设计实验题目:编写Java程序统计一篇英文文档中各单词出现的次数,并按单词出现的频率由高到低进行输出。

时间:2024-03-24 21:33:46浏览次数:61  
标签:Map word wordMap 单词 由高到 哈希 Java String

  1. 题目描述

编写Java程序统计一篇英文文档中各单词出现的次数,并按单词出现的频率由高到低进行输出。

例如:文档“Hello word Hello”的统计结果为:

 Hello:2次

 word:1次

思路分析

  1. 1. 处理文档:先用nextLine()将文段输入,存储在字符串file,再调用split()方法将字符串分割成一个个单词放在一个数组中。
  2. 关于split()方法:
  3. 签名为:string.split("character"),其中,string为字符串类型变量实例,character为要设为分割符的字符。
  4. 连接符:若需要设置多个分割符,则需要用连接符 '|',将多个分割符连接起来。
  5. 特殊处理:如 ",:,.,\等符号是正则表达式的一部分,需要加反斜杠符"\"进行转义。
  6. 下面是本题的例子:
  7. String file = input.nextLine();//输入文档
    String[] words;
    words = file.split(" |,|\\.|\"");//设置字符串数组元素之间的分隔符,
    											//其中.和"是正则表达式的一部分,需要加进行转义
    								//通过实践发现两者进行转义的方法不同,分别是加“\\”和“\"

  8. 2. 用for-each循环遍历数组将各个单词以及频次作为哈希表的条目存入自定义哈希表wordMap。
//for-each循环遍历							
for(String word: words) {
    if(word == "") continue;//处理空字符
    //将所有单词统一转换成小写,防止一个单词因为大小写不同原因被记为两个单词
    word = word.toLowerCase();
    //该位置哈希值为空值时,赋初始值1
    if(wordMap.get(word) == null)
	wordMap.put(word, 1);
	//哈希表位置不为空时,单词频次加一
	else 
		wordMap.put(word, wordMap.get(word) + 1);
}

3.排序:将Map的条目转换成List列表集合,调用Collection类中的sort方法进行排序。根据哈希值进行排序,需要重写比较器Comparator。

/*进行排序*/
//将Map的条目转换成List列表集合,调用Collection类中的sort方法进行排序
ArrayList<Map.Entry<String, Integer>> wordNumberList = new ArrayList<>(wordMap.entrySet());
//根据值进行排序,需要重写比较器
Collections.sort(wordNumberList, new Comparator<Map.Entry<String, Integer>>(){
		@Override
		public int compare(Map.Entry<String, Integer> object1, Map.Entry<String, Integer> object2) {
			//降序
			return object2.getValue() - object1.getValue();
		}
});

4.打印结果:设置一个计数器count,每输出5个单词换行。

/*打印结果*/
int count = 0;//计数器
for(Map.Entry<String, Integer> entry: wordNumberList) {
	count++;
	System.out.print(entry.getKey() + ": " + entry.getValue() + "次  ");
	//每5个单词换行显示
	if(count % 5 == 0)
		System.out.printf("\n");
}

完整代码

import java.util.Scanner;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class WordNumber {

	public static void main(String[] args) {
		HashMap<String, Integer> wordMap = new HashMap<>();//声明哈希表
		Scanner input = new Scanner(System.in);
		System.out.println("请输入有一篇英语文档:");
		String file = input.nextLine();//输入文档
		String[] words;
		words = file.split(" |,|\\.|\"");//设置字符串数组元素之间的分隔符,
											//其中.和"是正则表达式的一部分,需要加进行转义
		//for-each循环遍历									//通过实践发现两者进行转义的方法不同,分别是加“\\”和“\"
		for(String word: words) {
			if(word == "") continue;//处理空字符
			//将所有单词统一转换成小写,防止一个单词因为大小写不同原因被记为两个单词
			word = word.toLowerCase();
			//该位置哈希值为空值时,赋初始值1
			if(wordMap.get(word) == null)
				wordMap.put(word, 1);
			//哈希表位置不为空时,单词频次加一
			else 
				wordMap.put(word, wordMap.get(word) + 1);
		}
		
		/*进行排序*/
		//将Map的条目转换成List列表集合,调用Collection类中的sort方法进行排序
		ArrayList<Map.Entry<String, Integer>> wordNumberList = new ArrayList<>(wordMap.entrySet());
		//根据值进行排序,需要重写比较器
		Collections.sort(wordNumberList, new Comparator<Map.Entry<String, Integer>>(){
			@Override
			public int compare(Map.Entry<String, Integer> object1, Map.Entry<String, Integer> object2) {
				//降序
				return object2.getValue() - object1.getValue();
			}
		});
		
		/*打印结果*/
		int count = 0;//计数器
		for(Map.Entry<String, Integer> entry: wordNumberList) {
			count++;
			System.out.print(entry.getKey() + ": " + entry.getValue() + "次  ");
			//每5个单词换行显示
			if(count % 5 == 0)
				System.out.printf("\n");
		}
	}
}

标签:Map,word,wordMap,单词,由高到,哈希,Java,String
From: https://blog.csdn.net/m0_74412436/article/details/136991078

相关文章

  • 【javaWeb &第三篇】Vue快速入门
    VUEvue是一套前端框架,免除原生的js的DOM操作,简化书写基于MVVM(model-view-viewmodel)思想,实现数据的双向绑定,将编程的关注放在数据上。什么是框架:框架相当于一个半成品,是一套高效的代码模板,基于框架开发更加的高效VUE数据绑定模型:model层中存在着对数据的处理,vi......
  • java常用的几个工具类
    org.apache.commons.io.IOUtilscloseQuietly:关闭一个IO流、socket、或者selector且不抛出异常,通常放在finally块toString:转换IO流、Uri、byte[]为Stringcopy:IO流数据复制,从输入流写到输出流中,最大支持2GBtoByteArray:从输入流、URI获取byte[]write......
  • Java练手游戏--俄罗斯方块
    Java基础小练手游戏项目:俄罗斯方块简单版使用Java实现俄罗斯方块大概思路:界面设计:使用JavaSwing或JavaFX创建游戏窗口和用户界面。创建一个主窗口类(如GameFrame.java),负责设置窗口大小、标题等属性。设计游戏面板(如GamePanel.java),用于绘制游戏区域、下一个方块预览区、得......
  • 【附源码】JAVA计算机毕业设计音乐豆瓣(springboot+mysql+开题+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展,音乐作为人们日常生活中不可或缺的一部分,其获取与分享方式也在不断地变革。传统的音乐获取途径,如购买唱片或到实体音乐店挑选......
  • 在Java项目中使用Redis的五大数据结构应用场景与代码实现
    在Java项目中使用Redis的五大数据结构可以应用于以下场景:1、字符串(String):1、缓存数据:将经常访问的数据存储在Redis中,以减轻数据库的负载。2、计数器:记录用户的访问次数、点赞数等。3、分布式锁:在分布式环境下实现互斥访问,防止并发问题。2、列表(List):1、消息队列:将生产......
  • java中for ( i = 0; i < 3; i++)和for (int i = 0; i < 3; i++)有什么区别
    在Java中,for(i=0;i<3;i++)和for(inti=0;i<3;i++)之间的主要区别在于变量的作用域。for(i=0;i<3;i++):这种形式的循环使用了一个已经在循环之前声明的变量i。这通常发生在变量i在循环之前已经在其他地方被声明和初始化。javainti;//变量i在此处声......
  • Java序列化之Jackson详解
    目录1Jackson1.1Jackson简介1.2为什么选择Jackson1.3Jackson的基本功能1.3.1将Java对象转换为JSON字符串(序列化)1.3.2将JSON字符串转换为Java对象(反序列化)1.4Jackson库主要方法1.5使用Jackson基本步骤1.5.1添加依赖(Maven或Gradle)1.5.2创建Java对象模型1.5.3使用ObjectMa......
  • JAVAEE——多线程的设计模式,生产消费模型,阻塞队列
    文章目录多线程设计模式什么是设计模式单例模式饿汉模式懒汉模式线程安全问题懒汉模式就一定安全吗?锁引发的效率问题jvm的优化引起的安全问题阻塞队列阻塞队列是什么?生产消费者模型阻塞队列实现消费生产者模型可能遇到的异常多线程设计模式什么是设计模式首先我......
  • java入门基础掌握知识
    Java基础入门Java一门高级编程语言Java是sun公司研发的,现在属于oracle公司Java之父是詹姆斯.高斯林Java主要是来做企业级应用开发的Java的三大技术体系是:技术体系说明JavaSE(JavaStandardEdition):标准版Java技术的核心和基础JavaEE(JavaEnterpri......
  • 注解总结,Java中的注解,springboot中的注解
    注解总结1、Junit开始执行的方法:初始化资源,执行完之后的方法:释放资源测试方法,必须是:公有、非静态、无参无返回值的在一个类中,可以定义多个测试方法,每个测试方法可以单独运行,也可以整体运行(顺序:方法名升序)Junit4注解说明@Test测试方法@Before用来修饰实例方法,在每个@......