如果已经回答,请原谅。我已经找了两天寻找答案,最后还是走了这么远。这是要解决的问题:
编写一个名为stripComments的方法,该方法接受表示包含Java程序作为参数的输入文件的Scanner,读取该文件,然后打印文件的文本并删除所有注释。注释是从//到行尾的行上的任何文本,以及/ *和* /字符之间的任何文本。例如,请考虑以下文本:
import java.util.*;
/* My program
by Suzy Student */
public class Program {
public static void main(String[] args) {
System.out.println("Hello, world!"); // a println
}
public static /* Hello there */ void foo() {
System.out.println("Goodbye!"); // comment here
} /* */
}
这就是我提出的:
public static void stripComments(Scanner scan) {
while(scan.hasNextLine()) {
String str1 = scan.nextLine();
String str2 = str1.replaceAll("(/(\\*).*?(\\*)/)|(//.*?$)|(/(\\*).*?$)|([a-zA-Z\\s0-9]*?\\*(/))", "");
System.out.println(str2);
}
}
结果如下:
import java.util.*;
public class Program {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
public static void foo() {
System.out.println("Goodbye!");
}
}
虽然大多数都是正确的,但我不知道如何摆脱“公共课程{{”以上的额外路线。我如何摆脱这一行,是否有更好的方法来编写正则表达式?
提前谢谢!
答案 0 :(得分:0)
我想出了第二个替换命令
str = str.replaceAll("\n\\s*\n", "\n");
这要求您传入整个文件,但它不会逐行工作。
如果你想继续逐行,你应该做
if(str2.matches("\\s*"))
continue;
P.S。如果您没有量词,那么围绕正则表达式的最后一组括号是不必要的。您的多行注释不适用于3行以上,例如:
/*
* This is
* a multiline
* Comment
*/
因为你是逐行传递的。
答案 1 :(得分:0)
如果您不想使用Regex,可以执行以下操作:
文件内容( code.txt ):
import java.util.*;
/**
*
* some comments
*
*/
/*
some comments*/
public class Program {
public static void main(String[] args) {
System.out.println("Hello, world!"); // some comments
} /*****/
public static void foo() {
System.out.println("Goodbye!");
} /*some other comments*/
// some comments
}
<强>方法强>
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Main {
public static void main(String[] argv){
File file = new File("C:\\Users\\Yahya\\Desktop\\code.txt");
try {
stripComments(new Scanner(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
static void stripComments(Scanner scan){
while(scan.hasNextLine()) {
String line = scan.nextLine();
if(line.startsWith("/**") || line.startsWith("/*") ){
while(!line.endsWith("*/")){
line = scan.nextLine();
}
line="";
}
else if (line.contains("/*")){
line = line.substring(0, line.indexOf("/*"));
}
else if (line.contains("//")){
line = line.substring(0, line.indexOf("//"));
}
System.out.println(line);
}
}
}
测试(输出):
import java.util.*;
public class Program {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
public static void foo() {
System.out.println("Goodbye!");
}
}