在Java中处理空行

在Java中处理空行,java,Java,我在下面的代码中遇到了一个问题。我正在尝试运行该程序,当它在我的输入中出现空白时,程序终止。否则我该怎么做 try { BufferedReader sc = new BufferedReader(new FileReader(text.txt); ArrayList<String> name = new ArrayList<>(); ArrayList<String> id = new ArrayList<>();

我在下面的代码中遇到了一个问题。我正在尝试运行该程序,当它在我的输入中出现空白时,程序终止。否则我该怎么做

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();
}  }
试试看{
BufferedReader sc=新的BufferedReader(新文件读取器(text.txt);
ArrayList name=新的ArrayList();
ArrayList id=新的ArrayList();
ArrayList place=新的ArrayList();
ArrayList details=新的ArrayList();
字符串行=null;
而((line=sc.readLine())!=null){
如果(!line.trim()等于(“”){
系统输出打印项次(行);
if(line.toLowerCase()包含(“名称”)){
name.add(line.split(“=”[1].trim());
}
if(line.toLowerCase()包含(“id”)){
id.add(line.split(“=”[1].trim());
}
if(line.toLowerCase()包含(“位置”)){
place.add(line.split(“=”[1].trim());
}
if(line.toLowerCase()包含(“详细信息”)){
details.add(line.split(“=”[1].trim());
}
}
}
PrintWriter pr=新的PrintWriter(新文件(text.csv));
pr.println(“名称;Id;位置;详细信息”);
对于(int i=0;i
我的输入看起来像

名称=abc

id=123

地点=xyz

详细信息=hsdyhuslkjaldhaadj

name=ert

id=7872

地点=

详细信息=Shahkjdhkshala

名称=sfd

id=4343

地点=ksjks

详细信息=kljhaljs


当我试图执行上面的文本时,我的程序在place=“null”终止,因为那里没有值。我需要在place=“null”中创建一个空的空间,并在.csv文件中打印剩余的内容,如果您处理位置,
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() : "";
}
私有字符串parseContentDefaultEmpty(最后一行字符串){
最终字符串[]结果=行。拆分(“”);

如果(result.length首先出现问题,您的输入文件包含键“place”,但您正在尝试输入单词“location”

如下所示修改了代码段。请检查它

   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());
            }
        }
    }

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

谢谢。我已经做了这些更改,但仍然显示了类似java.lang.ArrayIndexOutofBounds的异常异常:1 at Check.main(Check.java:31)您的第31行是什么?
   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());
            }
        }
    }