Java:扫描仪不扫描完整的行

时间:2012-09-04 16:30:55

标签: java java.util.scanner

我有以下文本文件(不是java文件)

/*START OF CHANGES TO CODE*/
public class method1 {

    public static int addTwoNumbers(int one, int two){
        return one+two;
    }

    public static void main (String[] args){
        int total = addTwoNumbers(1, 3);
        System.out.println(total);
    }
}
/*END OF CHANGES TO CODE*/

我正在尝试使用以下代码来读取文件

String editedSection = null;
boolean containSection = false;
Scanner in = new Scanner(new FileReader(directoryToAddFile));
while(in.hasNextLine()) {
    if(in.nextLine().contains("/*START OF CHANGES TO CODE*/")) {
        containSection = true;
        editedSection = in.nextLine().toString();
    } else if (containSection == true) {
        editedSection = editedSection+in.nextLine().toString();
    } else if (in.nextLine().contains("/*END OF CHANGES TO CODE*/")) {
        containSection = false;
        editedSection = in.nextLine().toString();
    }
    in.nextLine();
}

所以基本上我想要它做的是读取一个文件,直到它看到/*START OF CHANGES TO CODE*/,然后开始将每行后面的字符串添加到字符串,直到它到达/*END OD CHANGES TO CODE*/。但是当它读取线条时,它忽略了一些线条和其他部分。有谁知道怎么做?

1 个答案:

答案 0 :(得分:4)

您在in.nextLine()循环中调用while 批次次。这听起来对我来说真是个糟糕的主意。它将在每次迭代中执行多少次将取决于它进入哪些位...讨厌。

我建议你使用

while(in.hasNextLine()) {
    String line = in.nextLine();
    // Now use line for the whole of the loop body
}

这样你就不会因为检查而不小心跳过行。