从文件中删除代码行
Drop lines of code from a file
我正在做一个小项目,我需要删除 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 完成。我只需要创建一个在处理后删除行的方法。
您似乎想要将周围的 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
.
我正在做一个小项目,我需要删除 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 完成。我只需要创建一个在处理后删除行的方法。
您似乎想要将周围的 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
.