我在以下代码中遇到问题。我正在尝试运行该程序,当它在我的输入中遇到空白空间时终止。我该怎么办呢?
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文件
答案 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循环之前前进)。