package com.Merge;注释
时间: 2024-05-04 18:18:25 浏览: 81
这是一个Java代码文件的开头,表示该文件属于com.Merge包下。而后面的注释则是对该文件的说明或者解释,可以是作者、时间、功能等等。例如:
```
/**
* @author John
* @version 1.0
* @since 2021-05-13
* This class implements a merge sort algorithm to sort an array of integers.
*/
```
这段注释表示该类实现了一个归并排序算法,用于对一个整数数组进行排序,并且提供了作者、版本、创建时间等信息。
相关问题
Java代码实现输入一段代码,当输入exit停止,统计这段代码中的各个关键词个数,需要再创建一个方法除去代码中的注释部分,如果输入为空则输出空
好的,我来给你写一个 Java 代码实现输入一段代码,统计各个关键词个数,并且除去注释的方法:
```java
import java.util.HashMap;
import java.util.Scanner;
public class KeywordCounter {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
StringBuilder codeBuilder = new StringBuilder();
String line;
while (!(line = scanner.nextLine()).equals("exit")) {
codeBuilder.append(line).append("\n");
}
String code = codeBuilder.toString();
if (code.trim().isEmpty()) {
System.out.println("空代码");
return;
}
HashMap<String, Integer> keywordCountMap = countKeywords(code);
System.out.println(keywordCountMap);
}
private static HashMap<String, Integer> countKeywords(String code) {
HashMap<String, Integer> keywordCountMap = new HashMap<>();
String[] keywords = {"abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue",
"default", "do", "double", "else", "enum", "extends", "final", "finally", "float", "for", "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"};
String[] codeLines = code.split("\n");
boolean inBlockComment = false;
boolean inLineComment = false;
for (String line : codeLines) {
line = line.trim();
if (line.isEmpty()) {
continue;
}
if (inBlockComment) {
int endCommentIndex = line.indexOf("*/");
if (endCommentIndex != -1) {
inBlockComment = false;
line = line.substring(endCommentIndex + 2);
} else {
continue;
}
}
if (inLineComment) {
continue;
}
int lineCommentIndex = line.indexOf("//");
if (lineCommentIndex != -1) {
line = line.substring(0, lineCommentIndex);
}
int blockCommentIndex = line.indexOf("/*");
while (blockCommentIndex != -1) {
int endCommentIndex = line.indexOf("*/", blockCommentIndex + 2);
if (endCommentIndex != -1) {
line = line.substring(0, blockCommentIndex) + line.substring(endCommentIndex + 2);
blockCommentIndex = line.indexOf("/*");
} else {
inBlockComment = true;
line = line.substring(0, blockCommentIndex);
break;
}
}
line = line.trim();
String[] words = line.split("[^a-zA-Z0-9_]+");
for (String word : words) {
if (word.isEmpty()) {
continue;
}
for (String keyword : keywords) {
if (word.equals(keyword)) {
keywordCountMap.merge(keyword, 1, Integer::sum);
break;
}
}
}
}
return keywordCountMap;
}
}
```
这段代码实现了按行读入代码,统计各个关键词个数,并且除去注释的方法。具体思路是按行读入代码,逐行处理:
1. 去掉行首行尾的空格和制表符。
2. 判断是否为空行,如果是就忽略。
3. 如果当前在块注释中,判断当前行是否存在块注释结束符(`*/`),如果有就结束块注释,截取注释之后的部分;如果没有就忽略当前行。
4. 如果当前在行注释中,忽略当前行。
5. 判断当前行是否存在行注释符(`//`),如果有就截取注释之前的部分。
6. 判断当前行是否存在块注释符(`/*`),如果有就循环截取当前行中所有块注释,直到找到块注释结束符(`*/`)为止。如果当前行不存在块注释结束符,标记当前在块注释中,只截取注释之前的部分。
7. 去掉所有非字母数字下划线的其他字符,按空格分割出所有单词。
8. 遍历所有单词,如果是 Java 的关键词,就在关键词计数器中增加对应的计数。
最后输出关键词计数器中的值即可。
阅读全文