R7-9 统计Java程序中关键词的出现次数

2023-11-04

编写程序统计一个输入的Java源码中关键字(区分大小写)出现的次数。说明如下:

  • Java中共有53个关键字(自行百度)
  • 从键盘输入一段源码,统计这段源码中出现的关键字的数量
  • 注释中出现的关键字不用统计
  • 字符串中出现的关键字不用统计
  • 统计出的关键字及数量按照关键字升序进行排序输出
  • 未输入源码则认为输入非法

输入格式:

输入Java源码字符串,可以一行或多行,以exit行作为结束标志

输出格式:

  • 当未输入源码时,程序输出Wrong Format
  • 当没有统计数据时,输出为空
  • 当有统计数据时,关键字按照升序排列,每行输出一个关键字及数量,格式为数量\t关键字

输入样例:

在这里给出一组输入。例如:

//Test public method
public HashMap(int initialCapacity) {
        this(initialCapacity, DEFAULT_LOAD_FACTOR);
    }
    public HashMap(int initialCapacity, float loadFactor) {
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal initial capacity: " +
                                               initialCapacity);
        if (initialCapacity > MAXIMUM_CAPACITY)
            initialCapacity = MAXIMUM_CAPACITY;
        if (loadFactor <= 0 || Float.isNaN(loadFactor))
            throw new IllegalArgumentException("Illegal load factor: " +
                                               loadFactor);
        this.loadFactor = loadFactor;
        this.threshold = tableSizeFor(initialCapacity);
    }
exit

输出样例:

在这里给出相应的输出。例如:

1	float
3	if
2	int
2	new
2	public
3	this
2	throw
// 双指针算法+HashMap+TreeMap+正则表达式
import java.util.*;
public class Main {
    public static boolean check( char x) {
        if((x>='a'&&x<='z') || (x>='A'&&x<='Z')) return true;
        else return false;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        HashMap<String,Integer> map = new HashMap<>();
        TreeMap<String,Integer> res = new TreeMap<>();
        String str[] = {"abstract","assert","boolean","break","byte","case","catch","char","class","continue","default","do","double","else","enum","extends","final","finally","float","for","if","implements","import","int","interface","instanceof","long","native","new","package","private","protected","public","return","short","static","strictfp","super","switch","synchronized","this","throw","throws","transient","try","void","volatile","while","goto","const","true","false","null"};
        for(int i=0; i<53; i++) map.put( str[i], 0);
        boolean F = true;
        while(sc.hasNext()) {
            String s1 = sc.nextLine();
            StringBuffer s = new StringBuffer();
            if(s1.equals("exit")) break;
            F = false;
            s.append(s1.replaceAll("\".*\"","").replaceAll("//.*","")); //运用正则表达式去除//注释的和双引号里的内容
            if(s.indexOf("/*")!=-1) { //删除/* */ 注释的
                if(s.indexOf("*/")!=-1) s.delete( s.indexOf("/*"), s.indexOf("*/")+2); // /* */注释没有跨行
                else { // /* */跨行
                    s.delete( s.indexOf("/*"), s.length());
                    while(sc.hasNext()) { //一直输入知道出现 */
                        String sr = sc.nextLine();
                        if(sr.indexOf("*/")!=-1) {
                            s.append( sr.substring(sr.indexOf("*/")+2));
                            break;
                        }
                    }
                }
            }
            String sr = s.toString();
		    sr = sr.replace("=", "a"); //测试点2
            int l = sr.length();
            for(int i=0; i<l; i++) { //运用双指针扫描,把每个词提取出来
                while(i<l && check( sr.charAt(i) ) == false) i++;
                int j = i;
                while(j<l && check( sr.charAt(j) ) == true) j++;
                if(i < l) {
                    String r = sr.substring( i, j); //把扫描出来的单词提前出来
                    if(map.containsKey(r) == true ) { //判断是否是关键词
                        if(res.containsKey(r) == false) res.put( r, 1);
                        else res.replace( r, (res.get(r)+1));
                    }
                }
                i = j;
            }
        }
        if( F ) System.out.println("Wrong Format");
        else if(res.size()!=0){
            for(String i: res.keySet())
                System.out.println(res.get(i) + "\t" + i);
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R7-9 统计Java程序中关键词的出现次数 的相关文章

随机推荐

  • Unity3d Note5(鼠标打飞碟(Hit UFO)游戏)

    1 作业要求 2 具体设计 1 制备预制体作为飞碟 2 了解一下Singleton模板类 3 了解一下工厂模式 3 设计具体要实现的类 3 程序代码 成果视频 1 作业要求 编写一个简单的鼠标打飞碟 Hit UFO 游戏 游戏内容要求 游戏
  • Oracle 取出动态sql 执行的结果的两种方式

    以下是怎么取出动态sql执行结果的两种方式 第一种 直接 execute immediate insert into newTable id name select id name from dual 执行后 放到一个新的表里 第二种方式
  • JDBC、MAVEN概述

    1 什么是JDBC JDBC Java DataBase Connectivity Java数据库连接 其实就是 利用Java语言 程序连接并访问数据库的一门技术 之前我们可以通过CMD或者navicat等工具连接数据库 但在企业开发中 更
  • 本地访问远程web服务

    1 2 以管理员身份运行cmd ssh username remote address L 127 0 0 1 8888 127 0 0 1 8008 3 在远程服务器上去运行web服务 4 本地访问
  • 设置flex:1效果异常(父容器撑高/其它子元素高度缩小)

    先讲解决方案 1 自动占满容器 设置height min height 0 2 设置overflow hidden 原理是flex内容溢出原理 1 开发中想利用flex 1实现容器自动占满剩余高度 效果如下图 2 实现的时候div3是一个容
  • mysql grouping sets_Hive.GROUPINGSETS的“陷阱”

    之前整理了一下Hive 0 10版引进的GROUPING SETS子句特性 并作了简单的句法使用体验和数据验证 但是当时没有注意到稍微复杂一点的情况 然后 在实际使用过程中 妥妥地就中了一枪 这一枪发生在有JOIN操作的时候 情况是这样的
  • Typora 常用快捷键大全

    Typora 常用快捷键大全 Ctrl 1 一级标题 Ctrl 2 二级标题 Ctrl 3 三级标题 Ctrl 4 四级标题 Ctrl 5 五级标题 Ctrl 6 六级标题 Ctrl 0 段落 Ctrl 提升标题等级 Ctrl 降低标题等级
  • 期货开户的身份识别验证

    无论你是开通商品期货 原油期货还是股指期货以及期权 现在都支持网上办理 原油期货和股指期货以及期权品种都是在商品期货账户的基础上满足条件后再另外开通交易权限 叁格期权小编在这里为各位投资者详细介绍商品期货网上开户流程 一 开户前准备 开户准
  • markdown 表格不能换行吗

    在 Markdown 表格中 不能使用换行符来换行 如果您希望在表格中的单元格内换行 可以使用 HTML 语法 br 例如 列 1 列 2 这是第一列 这是第二列 br 换行了
  • Android 的Activity.getWindowManager().getDefaultDisplay().getWidth()过时了

    Android获取屏幕宽度和高度的方法 1 下面方发已经过时在API 13就已经放弃了 Activity getWindowManager getDefaultDisplay getWidth 获取屏幕宽度 Activity getWind
  • 练习项目npm start启动时报错的个人解决办法

    错误原因 这几天在学习react 跟着慕课网的视频学习 React实战 打造画廊应用 上 React实战 打造画廊应用 下 在用yeoman最初构建项目 完成后需要启动项目 运行npm start时 出现了错误 gt 0 0 1 start
  • Windows环境下基于Python的PyUSB库开发USB通讯

    最近在研究USB通讯 想用Python来实现 比较好用的一个库是PyUSB 但发现相关中文资料比较少 在这里做一个整理 系统是Windows 10 64位 1 安装PyUSB 运行cmd用pip安装pyusb pip install pyu
  • webservice的接口测试工具

    一 webservice介绍 webservice是一个跨语言跨平台的技术 使用webservice进行接口测试时不需要知道每一种语言和操作系统 webservice工作原理 webservice主要核心技术 HTTP 使用http来传输数
  • 解决java或jsp中的For input string的错误

    目录 问题 解决方案 方案一 方案二 方案三 备注 问题 我们在做接jsp开发时 不论是在jsp页面 还是在controller中 都会遇到这样的错误 For input String错误 为什么会出现这样的错误呢 当时 我在init中从数
  • beamer笔记——幻灯片比例改为16:9

    beamer进阶学习 幻灯片比例改为16 9 将幻灯片比例改为16 9 documentclass aspectratio 169 beamer 幻灯片包括的比例主要有 16 10 14 9 1 41 1 5 4 4 3 default 3
  • 【CTF】Python原型链污染

    Python原型链污染 原型链 在Python中每个对象都有一个原型 原型上定义了对象可以访问的属性和方法 当对象访问属性或方法时 会先在自身查找 如果找不到就会去原型链上的上级对象中查找 原型链污染攻击的思路是通过修改对象原型链中的属性
  • Java,微信群

    一起进行Java的知识传递与分享 快来加入吧 有问题可加个人微信 Ysrbj18 备注Java交流 拉你入群 可扫码加我
  • muduo库学习-日志模块的学习以及C++日志模块封装

    前言 开发一款软件 一个好的日志库肯定是必不可少的 c 作为一门这么古老的开发语言 按理说应该有一些好用的日志库 但是在网上找到的那些日志库感觉用起来都不是很得心应手 因此就自己动手写了一个日志库 源码放在github上 我自己写的这个日志
  • Channel On Live(离散化)

    题目网址 https acm ecnu edu cn contest 103 problem C 离散化 1 unique函数 c unique t 1 t 1 n t 1 此为去重函数 12335去重后为12355 即去掉重复的 后面的不
  • R7-9 统计Java程序中关键词的出现次数

    编写程序统计一个输入的Java源码中关键字 区分大小写 出现的次数 说明如下 Java中共有53个关键字 自行百度 从键盘输入一段源码 统计这段源码中出现的关键字的数量 注释中出现的关键字不用统计 字符串中出现的关键字不用统计 统计出的关键