我正在开发一个小项目,我需要在java中删除一些注释代码。有两种情况我应该删除这些行:(i)当代码行以//#
开头时; (ii)当代码行以//@
开头时。
但是,我为此案例开发的方法不适用于任何一种类型的删除:
private static void dropLines(String[] args, String f) throws IOException {
List<String> lines = Files.readAllLines(Paths.get(f), Charset.forName("UTF-8"));
PrintWriter pw = new PrintWriter(new FileWriter(f));
boolean empty = false;
for (String string : lines) {
if (!string.trim().startsWith("//#")) {
if (string.trim().equals("") && !empty) {
pw.println(string);
empty = true;
} else if (!string.trim().equals("")) {
pw.println(string);
empty = false;
}
}
else if (!string.trim().startsWith("//@")) {
if (string.trim().equals("") && !empty) {
pw.println(string);
empty = true;
} else if (!string.trim().equals("")) {
pw.println(string);
empty = false;
}
}
}
pw.flush();
pw.close();
}
输入文件的示例如下:
public class Main {
//#ifdef calendar
//@ public static void googleCalendar() {
//@ System.out.println("Google Calendar");
//@ }
//#endif
//#ifdef category
public static void addCategory() {
System.out.println("Add Category");
}
//#endif
public static void main(String[] args) {
//#ifdef base
//@ System.out.println("Base");
//#endif
//#ifdef category
addCategory();
// #endif
//#ifdef calendar
//@ googleCalendar();
//#endif
}
}
重要:虽然输入文件的符号类似于预处理,但这对于删除行的这个阶段没有任何重要性,因为理论上,预处理部分已经在以前的方法中完成了使用Antenna。我只需要创建一个在处理后删除行的方法。
答案 0 :(得分:1)
看起来您希望将周围的if / else if语句更改为单个if语句:
private static void dropLines(String[] args, String f) throws IOException {
List<String> lines = Files.readAllLines(Paths.get(f), Charset.forName("UTF-8"));
PrintWriter pw = new PrintWriter(new FileWriter(f));
boolean empty = false;
for (String string : lines) {
if (!string.trim().startsWith("//#") && !string.trim().startsWith("//@")) {
if (string.trim().equals("") && !empty) {
pw.println(string);
empty = true;
} else if (!string.trim().equals("")) {
pw.println(string);
empty = false;
}
}
}
pw.flush();
pw.close();
}
按照现在的方式,它设置为始终重新打印该行,因为如果您的行以"//@"
开头,则!string.trim().startsWith("//#")
为true
,如果它以"//#"
然后!string.trim().startsWith("//@")
为true
。