让read.line()跳过一个空行

时间:2014-03-14 05:12:23

标签: java

编辑:安装简单修复程序并检查空白行。我还没有完全理解I / O以及read.line()的工作原理。

最终代码:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class MagicSquareAnalysis {
public static boolean testMagic(String pathName) throws IOException {
    // Open the file
    BufferedReader reader = new BufferedReader(new FileReader(pathName));

    boolean isMagic = true;
    int lastSum = -1;

    // For each line in the file ...
    String line;
    while ((line = reader.readLine()) != null) {
        // ... sum each row of numbers
        String[] parts = line.split("\t");
        int sum = 0;
        for (String part : parts) {
            if (line.isEmpty()) {
                continue;
            } else {
            sum += Integer.parseInt(part);
            }
        }

        if (lastSum == -1) {
            // If this is the first row, remember the sum
            lastSum = sum;
        } else if (lastSum != sum) {
            // if the sums don't match, it isn't magic, so stop reading
            isMagic = false;
            break;
        }
    }

    reader.close();
    return isMagic;
}

public static void main(String[] args) throws IOException {
    String[] fileNames = {     "C:\\Users\\Owner\\workspace\\MagicSquares\\src\\Mercury.txt", "C:\\Users\\Owner\\workspace\\MagicSquares\\src\\Luna.txt" };
    for (String fileName : fileNames) {
        System.out.println(fileName + " is magic? " + testMagic(fileName));
    }
}
}

原始问题

拥有一个读取.txt数字文件的Java程序。文本文件具有由选项卡间隔开的多行数字。我的程序第22行继续收到错误,这是代码:

sum += Integer.parseInt(part);

在几个语句检查程序的进度后,我发现错误是在程序分析第一行后发生的。由于某种原因,它一直试图读取的输入是空白行中的“”。 read.line()似乎没有像使用while语句那样跳过空白行。

为什么程序没有跳过空白行并尝试阅读它的任何想法?

3 个答案:

答案 0 :(得分:1)

因为split,根据文档,将返回一个包含单个元素的数组,该数组是一个空字符串。

readline()正在从行中删除\n(或\r\n窗口),返回一个空字符串。

当你这样做时:

String[] parts = line.split("\t");

对空字符串执行正则表达式时,有一个空的前导字符串,导致parts[0]""

您可以通过简单的测试看到这一点:

public static void main( String[] args )
{
    String foo = "";
    System.out.println("String length: " + foo.length());
    String[] parts = foo.split("\t");
    System.out.println("Array Length: " + parts.length);
    System.out.println("Length of that one String in the array: " + parts[0].length());
}

输出:

  

字符串长度:0
  阵列长度:1
  数组中一个字符串的长度:0

至少你需要检查那个空字符串:

for (String part : parts) {
    if (!part.isEmpty()) {
        sum += Integer.parseInt(part);
    }
}

答案 1 :(得分:0)

你可以试试这个:

while ((line = reader.readLine()) != null) {
    if ( line.trim().length() == 0)
         continue;
    //Your other code
}

答案 2 :(得分:0)

字符串""null不同,请查看此链接以获取更多信息。 Difference between null and empty ("") Java String

同样readline()仅在达到EOF(文件结尾)时返回null。

在执行split("\t")时,您可能会""更好地检查字符串中的“”,然后再将其解析为数字。

for (String part : parts) {
if(!part.isEmpty()){
//your code
}}