确保文本文件中的空行不会添加到列表中?

时间:2016-04-26 13:59:31

标签: java string list file methods

我有一个Java method(下方)检查text file的{​​{1}}值,然后再添加到string

list

但是,此方法会将空行例如: public List<String> iterateTextFile(String filePath) { List<String> lines = new ArrayList<String>(); try { lines = Files.readLines(new File(filePath), Charset.forName("utf-8")); }catch(IOException e){ e.printStackTrace(); } return lines; } 添加到""。我不想要这个吗?

如何添加验证以便不会发生这种情况?

4 个答案:

答案 0 :(得分:0)

过滤它们:

public List<String> iterateTextFile(String filePath) {

        List<String> lines = new ArrayList<String>();
        try {
            lines = Files.readAllLines(Paths.get(filePath)).stream().filter(str -> !str.trim().isEmpty()).collect(Collectors.toList());
        }catch(IOException e){
            e.printStackTrace();
        }
        return lines;
    }

对于pre-stream java版本,你可以这样做(从最后一个位置到0,所以你没有替换):

public List<String> iterateTextFile(String filePath) {

        List<String> lines = new ArrayList<String>();
        try {
            lines = Files.readLines(new File(filePath), Charset.forName("utf-8"));
            eliminateEmptyStrings(list);
        }catch(IOException e){
            e.printStackTrace();
        }
        return lines;
    }

    private void eliminateEmptyStrings(List<String> strings) {
    for (int i = strings.size() - 1; i >= 0; i--) {
       if (strings.get(i).trim().isEmpty()) strings.remove(i);
    }
}

注意:添加断言以检查空值,或者最终可能会出现一些NPE或其他不受控制的异常。

答案 1 :(得分:0)

在返回之前删除空元素: -

for(int i =0; i < lines.size(); i++) {
  if(list.get(i).equals("")) {
    list.remove(i);
  }
}
return list;

答案 2 :(得分:0)

看看这个答案:只需修改&#39; LineProcessor&#39;过滤掉空行!

link

答案 3 :(得分:0)

您也可以尝试类似

的内容
List<String> lines = new LinkedList<>();
int lineCounter = 0;
Scanner scanner = new Scanner(new File(filePath));
while(scanner.hasNext()){
    String currentLine = scanner.nextLine();
    lineCounter++;
    if(currentLine!=null && currentLine.length()==0){
        System.out.println("Skipping empty line number:" + lineCounter);
    }else{
        lines.add(currentLine);
    }

}

请参阅使用计数器变量来指示这是否正常工作。好吧,这段代码显然需要FileNotFoundException来处理。