编写程序统计一个输入的Java源码中关键字(区分大小写)出现的次数。说明如下: Java中共有53个关键字(自行百度) 从键盘输入一段源码,统计这段源码中出现的关键字的数量 注释中出现的关键字不用统计 字符串中出现的关键字不用统计 统计出的关键字及数量按照关键字升序进行排序输出 未输入源码则认为输入非法 输入格式: 输入Java源码字符串,可以一行或多行,以exit行作为结束标志 输出格式: 当未输入源码时,程序输出Wrong Format 当没有统计数据时,输出为空 当有统计数据时,关键字按照升序排列,每行输出一个关键字及数量,格式为数量\t关键字
时间: 2024-03-02 10:54:17 浏览: 69
好的,以下是Java代码实现:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 初始化Java关键字
String[] keywords = {"abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "default", "do", "double", "else", "enum", "extends", "final", "finally", "float", "for", "goto", "if", "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<>();
String line;
while (!(line = scanner.nextLine()).equals("exit")) {
line = line.trim(); // 去掉首尾空格
if (line.startsWith("//") || line.startsWith("/*") || line.startsWith("*")) { // 过滤注释
continue;
}
for (String keyword : keywords) {
String regex = "\\b" + keyword + "\\b"; // 正则表达式匹配整个单词
if (line.matches(".*" + regex + ".*")) {
if (line.matches(".*\".*" + regex + ".*\".*")) { // 过滤字符串中的关键字
continue;
}
if (line.matches(".*'.*" + regex + ".*'.*")) { // 过滤字符常量中的关键字
continue;
}
map.put(keyword, map.getOrDefault(keyword, 0) + 1);
}
}
}
// 输出统计结果
if (map.isEmpty()) {
System.out.println();
} else {
for (String keyword : map.keySet()) {
System.out.println(map.get(keyword) + "\t" + keyword);
}
}
}
}
```
输入格式示例:
```
public void main(String[] args) {
int a = 1;
String b = "hello";
if (a == 1) {
System.out.println(b);
}
}exit
```
输出格式示例:
```
1 assert
1 boolean
2 if
1 int
1 public
1 return
1 String
1 void
```
阅读全文