处理Java中的空行

时间:2015-06-29 04:42:01

标签: java

我在以下代码中遇到问题。我正在尝试运行该程序,当它在我的输入中遇到空白空间时终止。我该怎么办呢?

try {
    BufferedReader sc = new BufferedReader(new FileReader(text.txt);
    ArrayList<String> name = new ArrayList<>();
    ArrayList<String> id = new ArrayList<>();
    ArrayList<String> place = new ArrayList<>();
    ArrayList<String> details = new ArrayList<>();
    String line = null;
    while ((line = sc.readLine()) !=null) {
        if (!line.trim().equals("")) {
            System.out.println(line);
            if (line.toLowerCase().contains("name")) {
                name.add(line.split("=")[1].trim());
            }
            if (line.toLowerCase().contains("id")) {
                id.add(line.split("=")[1].trim());
            }
            if (line.toLowerCase().contains("location")) {
               place.add(line.split("=")[1].trim());
           }
            if (line.toLowerCase().contains("details")) {
                details.add(line.split("=")[1].trim());
            }
        }
    }
    PrintWriter pr = new PrintWriter(new File(text.csv));
    pr.println("Name;Id;;Location;Details");
    for (int i = 0; i < name.size(); i++) {
        pr.println(name.get(i) + ";" + id.get(i)  + ";" + place.get(i) + ";"  + details.get(i));
    }
    pr.close();
    sc.close();
} catch (Exception e) {
    e.printStackTrace();
}  }

我的输入看起来像

name = abc

id = 123

place = xyz

details = hsdyhuslkjaldhaadj

name = ert

id = 7872

place =

details = shahkjdhksdhsala

name = sfd

id = 4343

place = ksjks

详情= kljhaljs

当我试图执行上面的文本时,我的程序终止于place =“null”,因为那里没有值。我需要将输出作为在place =“null”中创建的空白空间,并在a中按如下方式打印其余部分。 csv文件

3 个答案:

答案 0 :(得分:1)

如果处理该位置,line.split("=")[1]可能导致ArrayIndexOutOfBoundException,line.split("=")[1].trim()可能导致NullPointerException。

您可以通过测试解析后的结果来避免这种情况。

取代place.add(line.split("=")[1].trim());,而不是place.add(parseContentDefaultEmpty(line));,使用:

private String parseContentDefaultEmpty(final String line) {
    final String[] result = line.split("=");
    if(result.length <= 1) {
        return "";
    }
    final String content = line.split("=")[1];
    return content != null ? content.trim() : "";
}

答案 1 :(得分:0)

首先出现问题,您的输入文件包含关键字&#34; place&#34;但是你正在努力寻找#34; location&#34;

 if (line.toLowerCase().contains("location")) { //this must be changed to place
           place.add(line.split("=")[1].trim());
       }

修改了以下代码段。检查

   while ((line = sc.readLine()) != null) {
        if (!line.trim().equals("")) {
            System.out.println(line);
            if (line.toLowerCase().contains("name")) {
                name.add(line.split("=")[1].trim());
            }
            if (line.toLowerCase().contains("id")) {
                id.add(line.split("=")[1].trim());
            }
            if (line.toLowerCase().contains("place")) {
                // change done here to add space if no value
                place.add(line.split("=").length > 1 ? line.split("=")[1]
                        .trim() : " ");
            }
            if (line.toLowerCase().contains("details")) {
                details.add(line.split("=")[1].trim());
            }
        }
    }

答案 2 :(得分:0)

将问题设置为行并不会改变以后读取的行(如果您希望该行在到达while循环之前前进)。