编写程序统计一个输入的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



答案

仅供参考,提交没通过,哪位大佬通过了教我一手,感谢!
/*仅供参考,提交没通过,哪位大佬通过了教我一手,感谢!*/
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Main {
    //Java中的53个关键字
    public static final List<String> KEYWORD = Arrays.asList(
            "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"
    );

    /**
     * 关键字统计
     * @param code 需要统计的代码串
     * @return Map
     * @author GDF
     */
    public static Map<String, Integer> statistic(String code) {
        Map<String, Integer> map = new HashMap<>();
        String[] arr = code.split("\\s+");
        for (String s : KEYWORD) {
            map.put(s, 0);
        }
        for (String s : arr) {
            if (KEYWORD.contains(s)) {
                map.put(s, map.get(s) + 1);
            }
        }
        return map;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder code = new StringBuilder();
        boolean flag = true;
        while (true) {
            String str = scanner.nextLine();
            if (str.equals("exit")) {
                StringBuilder codeStr = new StringBuilder(code.toString().replaceAll("\\s+", ""));
                if (codeStr.length() == 0) {
                    flag = false;
                    System.out.println("Wrong Format");
                }
                break;
            }
            str += " ";
            int index = str.indexOf("//");
            if (index >= 0) {
                str = str.substring(0, index);
            }
            code.append(str);
        }
        code = new StringBuilder(code.toString().replaceAll("/\\*(.*)\\*/", " "));
        code = new StringBuilder(code.toString().replaceAll("\\\\\"(.*?)\\\\\"", " "));
        code = new StringBuilder(code.toString().replaceAll("\"(.*?)\"", " "));
        code = new StringBuilder(code.toString().replaceAll("[^a-zA-Z0-9_]", " "));

//        System.out.println(code.toString());
        Map<String, Integer> map = statistic(code.toString());
        for (String s : KEYWORD) {
            if (map.get(s) > 0) {
                flag = false;
                System.out.println(map.get(s) + "\t" + s);
            }
        }
        if (flag){
            System.out.println("");
        }
    }
}
/*仅供参考,提交没通过,哪位大佬通过了教我一手,感谢!*/
最后修改:2020 年 10 月 14 日 08 : 54 PM
愿君多打钱,此物最相思