7-4 统计Java程序中关键词的出现次数 (25 分)

**

7-4 统计Java程序中关键词的出现次数 (25 分)

**
编写程序统计一个输入的Java源码中关键字(区分大小写)出现的次数。说明如下:
Java中共有53个关键字(自行百度)
从键盘输入一段源码,统计这段源码中出现的关键字的数量
注释中出现的关键字不用统计
字符串中出现的关键字不用统计
统计出的关键字及数量按照关键字升序进行排序输出
未输入源码则认为输入非法

输入格式:

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

输出格式:

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

解题报告
题目必须使用List、Set或Map中一种或多种,如完全未使用如上接口,不予评分

输入样例:

java
//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
//测试点并没有全部通过!!!
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Map;
import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        Scanner x = new Scanner(System.in);
        StringBuilder a = new StringBuilder();
        Map map=new TreeMap();
        String[] gjc = {"abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "default", "do", "double", "else", "enum", "extends", "false", "final", "finally", "float", "for", "goto", "if", "implements", "import", "instanceof", "int", "interface", "long", "native", "new", "null", "package", "private", "protected", "public", "return", "short", "static", "strictfp", "super", "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try", "void", "volatile", "while"};
        String kg,exit="exit";
        int i,n,flag=0;

        //输入
        kg = x.nextLine();
        while( !kg.equals(exit)) {
            a.append(kg.replaceAll("//.*", " ").replaceAll("\".*\"", " "));//去掉"//"后和的内容以及双引号里的内容
            kg = x.nextLine();
            flag=1;
        }
        String b = a.toString().replaceAll("/\\*\\s*.*\\s*\\*/", " ");//去掉"/* */"里的内容,放入字符串b中
        //System.out.println(b);

        //如果没有内容
        if(flag==0) {
            System.out.println("Wrong Format");
        }

        // 循环找每个关键词出现的次数
        for(i=0;i< gjc.length;i++) {
            Pattern pattern = Pattern.compile("\\b"+gjc[i]+"\\b");//创建关键词的正则表达式
            Matcher matcher = pattern.matcher(b);//字符串与关键词匹配
            n=0;
            while(matcher.find()) {//找到该关键词的话,记录该关键词的次数
                n++;
                //System.out.println(matcher.group());

            }
            if(n!=0){//把次数不是0的关键词替换为次数
                map.put(gjc[i], n);
            }
            //System.out.println(map);
        }
        //System.out.println(map);
        String map1= String.valueOf(map);//把map转化为字符串map1
        //System.out.println(map1);
        String map2=map1.replace("{","").replace("}","");//把map1里的"{""}"去掉存入字符串map2
        //System.out.println(map2);
        String[] map3=map2.split(", ");//把map2根据", "分开,存入字符串数组map3

        //循环输出
        for (i=0;i< map3.length;i++){
            String[] map4=map3[i].split("=");//把每个字符串map3根据"="分开,存入字符串数组map4
            System.out.println(map4[1]+"\t"+map4[0]);
        }

    }
}
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java的HashMap来实现统计Java程序关键词出现次数。具体实现步骤如下: 1. 定义一个HashMap<String, Integer>类型的变量来存储关键词和它们出现次数,其String表示关键词,Integer表示出现次数。 2. 使用Java的Scanner类读取文件或者用户输入的文本内容。 3. 使用Java的split()方法将文本内容按照空格、逗号、号等符号进行割,得到一个String数组。 4. 遍历该数组,对于每个关键词,如果该关键词已经存在于HashMap,则将该关键词对应的出现次数加1;否则将该关键词添加到HashMap,并将出现次数设为1。 5. 遍历完所有的关键词后,HashMap存储的就是所有关键词及其出现次数统计结果了。可以将其输出或者进行其他处理。 下面是一个简单的示例代码: ```java import java.util.*; public class KeywordCounter { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String text = scanner.nextLine(); scanner.close(); String[] words = text.split("\\W+"); Map<String, Integer> counts = new HashMap<>(); for (String word : words) { if (counts.containsKey(word)) { counts.put(word, counts.get(word) + 1); } else { counts.put(word, 1); } } for (String word : counts.keySet()) { System.out.println(word + ": " + counts.get(word)); } } } ``` 该程序会读取用户输入的文本内容,统计所有关键词出现次数,并输出结果。注意,该程序只能统计Java程序关键词,不能用于其他语言或者通用文本的关键词统计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值