如何判断是否已使用BufferedReader读入空行?

时间:2012-12-04 15:38:43

标签: java io whitespace bufferedreader

我正在阅读一个像

这样的文本文件
word
definiton

word
definition
definition

word
definition

所以我需要继续尝试根据我到达那些emtpy行的时间来定义或不定义。事情是,BufferedReader丢弃\n个字符,并且以某种方式将该空行与String ""进行比较并没有像我想象的那样进行注册。我怎么能这样做呢。

5 个答案:

答案 0 :(得分:17)

  1. 请务必使用:myString.equals("")而不是myString == ""。 1.6之后,您可以使用myString.isEmpty()
  2. 您可以在上述检查之前使用myString.trim()删除额外的空格
  3. 以下是一些代码:

    public void readFile(BufferedReader br) {
      boolean inDefinition = false;
      while(br.ready()) {
        String next = br.readLine().trim();
        if(next.isEmpty()) {
          inDefinition = false;
          continue;
        }
        if(!inDefinition) {
          handleWord(next);
          inDefinition = true;
        } else {
          handleDefinition(next);
        }
      }
    }
    

答案 1 :(得分:5)

如果该行为空,则BufferedReader.readLine()返回一个空字符串。

javadoc说:

  

返回:包含行内容的String,不包括任何行终止字符;如果已到达流的末尾,则返回null。

如果您似乎没有看到空字符串,则该行不为空,或者您没有正确测试空字符串。

答案 2 :(得分:1)

line = reader.readLine();
if ("".equals(line)) {
   //this is and empty line...
}

我不知道你是怎么试图检查字符串是空的,所以我无法解释为什么它对你不起作用。您是否可以使用==进行比较?在这种情况下,它不起作用,因为==比较了引用,而不是对象内容。

答案 3 :(得分:0)

此代码段会跳过空行并仅打印包含内容的行。

    String line = null;
    while ((line = br.readLine()) != null) {
        if (line.trim().equals("")) {
            // empty line
        } else {
            System.out.println(line);
        }
    }

也会跳过仅包含空格字符的行。

答案 4 :(得分:-1)

try (BufferedReader originReader = getReader("now")) {
    if (StringUtils.isEmpty(originReader.readLine())) {
        System.out.printline("Buffer is empty");
    }