从文件中删除代码行

时间:2018-02-27 18:05:41

标签: java automation automated-refactoring

我正在开发一个小项目,我需要在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。我只需要创建一个在处理后删除行的方法。

1 个答案:

答案 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