从文件中删除代码行

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.