我有一个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;
}
添加到""
。我不想要这个吗?
如何添加验证以便不会发生这种情况?
答案 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;过滤掉空行!
答案 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
来处理。