6.4 jmu-Java&Python-统计文字中的单词数量并按出现次数排序分数 25

作者 郑如滨

单位 集美大学

现在需要统计若干段文字(英文)中的单词数量,并且还需统计每个单词出现的次数

注1:单词之间以空格(1个或多个空格)为间隔。
注2:忽略空行或者空格行。

基本版:
统计时,区分字母大小写,且不删除指定标点符号。

进阶版:

  1. 统计前,需要从文字中删除指定标点符号!.,:*?。 注意:所谓的删除,就是用1个空格替换掉相应字符。
  2. 统计单词时需要忽略单词的大小写。

输入说明

若干行英文,最后以!!!!!为结束。

输出说明

单词数量
出现次数排名前10的单词(次数按照降序排序,如果次数相同,则按照键值的字母升序排序)及出现次数。

输入样例1

failure is probably the fortification in your pole

it is like a peek your wallet as the thief when you
are thinking how to spend several hard-won lepta
          
when you are wondering whether new money it has laid
background because of you then at the heart of the
     
most lax alert and most low awareness and left it

godsend failed
!!!!!

输出样例1

46
the=4
it=3
you=3
and=2
are=2
is=2
most=2
of=2
when=2
your=2

输入样例2

Failure is probably The fortification in your pole!

It is like a peek your wallet as the thief when You
are thinking how to. spend several hard-won lepta.

when yoU are? wondering whether new money it has laid
background Because of: yOu?, then at the heart of the
Tom say: Who is the best? No one dare to say yes.
most lax alert and! most low awareness and* left it

godsend failed
!!!!!

输出样例2

54
the=5
is=3
it=3
you=3
and=2
are=2
most=2
of=2
say=2
to=2

代码长度限制

16 KB

时间限制

1600 ms

内存限制

180 MB

import java.util.*;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        HashMap<String, Integer> array = new HashMap<>();

        String[] a = new String[100000];//由于我是一开始给出的数组大小,题目中有一个限制条
                                        //件,就是运行时间要长,如果太小运行速度太快,答案
                                        //会无法通过(就很无语)😂
        int count = 0;
        while (true) {
            String s = sc.next();
            String s1 = s.toLowerCase();//这里是将所有大写的字母变成小写
            String s2 = s1.replaceAll("[!.,:*?]","");//这里用的是用replaceAll来清除题目所要                                
                                                     //求的标点符号
            if (s.equals("!!!!!")) {
                break;
            } else {
                array.put(s2, 0);
                a[count] = s2;
            }
            count++;
        }
        System.out.println(array.size());
        //这里是实现统计文字中的单词数量
        for (int i = 0; i < count; i++) {
            if (!array.containsKey(a[i])){
                array.put(a[i],1);
            }else {
                int k = array.get(a[i])+1;
                array.put(a[i],k);
            }
        }
        //这里是实现内容按序排列并且输出
        List<Map.Entry<String, Integer>> freList = new ArrayList<>(array.entrySet());
        freList.sort(new WordComparator());
        int num = 0;
        for (Map.Entry<String, Integer> e : freList) {
            System.out.println(e.getKey() + "=" + e.getValue());
            if(++num == 10) {
                break;
            }
        }
    }
}
//这里按照题目的要求,先比较次数,再比较键值字母的先后顺序
class WordComparator implements Comparator<Map.Entry<String, Integer>> {
    @Override
    public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
        if (o1.getValue().equals(o2.getValue())) {
            return o1.getKey().compareTo(o2.getKey());
        } else {
            return o2.getValue().compareTo(o1.getValue());
        }
    }
}

这一道题目可谓是非常麻烦,我也是看了别人的做法,自己改进了之后变得稍微简单一点,比较好理解一点,适合新手来看,如果是大佬的话,还是建议用别的方法,毕竟博主水平有限,只能做出这种代码啦🤣

欢迎大家来评论优化我这个代码嘻嘻😉

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你好!如果你想统计一段文字每个单词出现次数并按照出现次数排序,可以按照以下步骤进行操作: 1. 将文本的标点符号、空格、换行等字符去除,只保留单词。可以使用正则表达式或字符串的方法来实现。 2. 将每个单词作为字典的key,出现次数作为value,建立一个空字典。 3. 遍历文本的每个单词,如果这个单词已经在字典出现过,将对应的value值加1;否则将这个单词加入字典,value值为1。 4. 使用Python的内置函数sorted()对字典按照value值进行排序。 5. 遍历排序后的字典,输出每个单词及其出现次数。 下面是一个简单的Python代码示例: ``` import re text = "Hello world, hello python, hello java, hello world." word_dict = {} # 去除标点符号和空格,只保留单词 words = re.findall(r'\b\w+\b', text) # 遍历单词列表,统计每个单词出现次数 for word in words: if word in word_dict: word_dict[word] += 1 else: word_dict[word] = 1 # 对字典按照value值进行排序 sorted_dict = sorted(word_dict.items(), key=lambda x: x[1], reverse=True) # 遍历排序后的字典,输出每个单词及其出现次数 for item in sorted_dict: print(item[0], item[1]) ``` 输出结果如下: ``` hello 4 world 2 python 1 java 1 ``` ### 回答2: JMU-Java是什么 JMU-Java是一种 Java 程序开发框架,是 James Madison University 的计算机科学系开发的,旨在为 Java 程序开发人员提供高效、便捷的开发工具。JMU-Java 集成了多种 Java 技术,如 JSP、Servlet、Struts、Hibernate、Spring 等,为开发人员提供了丰富的功能和易于扩展的平台。 JMU-Java 的特点 1.易用性 JMU-Java 注重易用性,提供了简单、直观的开发接口,让开发人员能够快速上手,高效开发。 2. 高效性 JMU-Java 提供了多种高效的技术组合,如缓存技术、数据库连接池技术等,可以大大提高程序的运行效率。 3.可扩展性 JMU-Java 可以轻松实现插件化扩展,开发人员可以为 JMU-Java 扩展自己的应用模块,增强 JMU-Java 的功能和灵活性。 4.安全性 JMU-Java 提供了严密的安全机制,保障了应用程序的安全性。 JMU-Java 的应用 JMU-Java 可以广泛应用于 Web 应用开发、企业级应用开发、物联网、大数据等领域。例如,在 Web 应用开发领域, JMU-Java 可以实现 Web 应用程序的快速开发和部署,提供了丰富的 Web 开发特性,如表单处理、会话管理、文件上传、邮件发送等。 总之,JMU-Java 作为一种高效、安全、易扩展的 Java 程序开发框架,为 Java 程序开发人员提供了便捷、高效的开发环境。 ### 回答3: JMU-Java,指的是James Madison University (JMU)的Java课程。JMU是一所位于美国弗吉尼亚州的公立研究型大学,该校设有计算机科学系,在教授编程语言方面拥有雄厚的师资和丰富的教学资源。其Java是计算机科学系开设的一门主要课程之一。教授这门课程的教师们十分专业,深入浅出地教授Java编程的基础和进阶知识,帮助学生掌握Java编程的核心概念和技能。 JMU-Java的教学内容包括Java编程语言的基础知识、变量、数组、方法、面向对象编程、异常处理、输入输出流、网络编程等方面的知识。学生通过学习这门课程能够掌握Java编程的基本原理和方法,能够使用Java编写简单的控制台程序、图形用户界面程序和网络应用程序等。 JMU-Java的教学目的是为了培养学生的编程思维和编程能力,提高学生的计算机编程技能,拓展学生的计算机科学知识。通过系统学习Java编程,学生将能够更好地理解计算机的工作原理和程序设计的基本思想,掌握解决实际问题的编程方法,增强自己的逻辑思维和创新意识。 总之,JMU-Java是一门极具实用价值的Java编程课程,通过学习这门课程,学生将能够掌握Java编程的基础知识和高级技巧,为自己将来的职业发展奠定坚实的基础。同时,学生也将能够更好地理解计算机科学及其应用领域的相关知识,在未来的工作和学习更加游刃有余。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值