编写程序统计一个输入的Java源码中关键字(区分大小写)出现的次数。说明如下: Java中共有53个关键字(自行百度) 从键盘输入一段源码,统计这段源码中出现的关键字的数量 注释中出现的关键字不用统计 字符串中出现的关键字不用统计 统计出的关键字及数量按照关键字升序进行排序输出 未输入源码则认为输入非法 输入格式: 输入Java源码字符串,可以一行或多行,以exit行作为结束标志 输出格式: 当未输入源码时,程序输出Wrong Format 当没有统计数据时,输出为空 当有统计数据时,关键字按照升序排列,每行输出一个关键字及数量,格式为数量\t关键字
时间: 2024-02-28 09:55:00 浏览: 60
源码关键字统计.rar
好的,我理解了你的要求。以下是 Java 代码实现,可以满足你的需求:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = "";
String line;
while (!(line = scanner.nextLine()).equals("exit")) {
input += line + "\n";
}
scanner.close();
if (input.trim().isEmpty()) {
System.out.println("Wrong Format");
return;
}
String[] keywords = new String[] {
"abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const",
"continue", "default", "do", "double", "else", "enum", "extends", "final", "finally", "float",
"for", "if", "goto", "implements", "import", "instanceof", "int", "interface", "long", "native",
"new", "package", "private", "protected", "public", "return", "short", "static", "strictfp",
"super", "switch", "synchronized", "this", "throw", "throws", "transient", "try", "void",
"volatile", "while"
};
Map<String, Integer> map = new TreeMap<>();
for (String keyword : keywords) {
map.put(keyword, 0);
}
String[] lines = input.split("\n");
for (String s : lines) {
s = s.replaceAll("\".*?\"", "").replaceAll("'.*?'", "");
s = s.replaceAll("//.*", "").replaceAll("/\\*.*?\\*/", "");
for (String keyword : keywords) {
int count = s.split("\\b" + keyword + "\\b").length - 1;
map.put(keyword, map.get(keyword) + count);
}
}
boolean isEmpty = true;
for (String keyword : map.keySet()) {
int count = map.get(keyword);
if (count > 0) {
System.out.println(count + "\t" + keyword);
isEmpty = false;
}
}
if (isEmpty) {
System.out.println();
}
}
}
```
这个程序首先读取用户输入的 Java 源码,存储在字符串 `input` 中。如果用户没有输入任何源码,则程序会输出 "Wrong Format"。
然后,程序使用一个字符串数组 `keywords` 存储 Java 中的所有关键字。通过 `Map<String, Integer>` 存储每个关键字出现的次数。使用 `TreeMap` 对关键字进行升序排序。
接着,程序对每行源码进行处理,暴力地使用正则表达式去除字符串和注释。然后,使用 `split()` 方法统计每个关键字在当前行中出现的次数,并更新该关键字在 `Map` 中对应的值。
最后,程序输出统计结果。如果没有任何关键字出现,则程序输出一个空行。
希望这个程序可以帮助到你,如果你还有什么问题,可以继续问我。
阅读全文