1

我想阅读一个包含一些字符串的文本文件,例如:

abc  
def

ghi  
jkl

mno  
pqr

我正在使用一个while循环来读取一对并将它们存储在一个arraylist中。我想在遇到空行 ( \n) 时立即停止,例如在def. 但是我的代码不起作用......我做错了什么?

while(!"\n".equals(sCurrentLine)) {
     -- do stuff --
}
4

5 回答 5

8

如果您正在逐行阅读,则空行是空行(""),而不是"\n"长度为 1 的字符串

您可能还需要检查在这种情况下是否没有更多行BufferedReader.readLine()返回 null

于 2013-07-04T09:43:01.633 回答
2

你犯了一个大错误:你假设换行符是\n,这并不总是正确的。根据操作系统,它可以CRLFCRLF

您可以按照自己的方式继续检查,但您必须对照所有这三种可能性进行检查。

您也可以使用String.trim()然后比较字符串"".equals(var.trim())

于 2013-07-04T09:45:21.510 回答
2
 while(!"".equals(sCurrentLine)) {
 -- do stuff --
 }

这将帮助你

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class AddToArrayList {
public static void main(String[] args) throws IOException {
    Scanner sc=new Scanner(new File("D:\\Text.txt"));
    ArrayList<String> str=new ArrayList<>();
    String s=null;
    while (sc.hasNext()){
        s=sc.nextLine();
        if(s.equals("")){
             continue;
        }
        str.add(s);
    }
}
}
于 2013-07-04T09:45:25.750 回答
1

你可以做这样的事情

假设 1,您要添加对跳过空行。

    String line = null;
        while ((line = br.readLine()) != null) {
          //when we encounter a empty line we continue
          //the loop without doing anything
          if (line.trim().isEmpty()) {
               continue;
          }
          //add to list
        }

假设2,你想在第一个空行退出

 String line = null;
   while ((line = br.readLine()) != null) {
      //when we encounter a empty line we exit the loop
      if (line.trim().isEmpty()) {
          //break the loop
          break;
      }
      //add to list
    }

希望这可以帮助。

于 2013-07-04T10:03:47.150 回答
0

您应该使用System.getProperty("line.separator")而不是使用系统相关的字符串。

于 2013-07-04T09:44:48.200 回答