【问题标题】:How do I tell if an empty line has been read in with a BufferedReader?如何判断是否使用 BufferedReader 读入了空行?
【发布时间】:2012-12-04 15:38:43
【问题描述】:

我正在阅读格式如下的文本文件

word
definiton

word
definition
definition

word
definition

所以我需要根据何时到达那些空行来不断尝试我是否在定义中。问题是,BufferedReader 丢弃了\n 字符,并且以某种方式将该空行与String "" 进行比较并没有像我想象的那样注册。我该怎么做呢。

【问题讨论】:

  • 请不要在标题中添加标签。

标签: java io whitespace bufferedreader


【解决方案1】:
  1. 确保使用:"".equals(myString)(即null-safe)而不是myString == ""
    • 1.6以后可以使用myString.isEmpty()(不是null-safe)
  2. 您可以在上述检查之前使用myString.trim() 去除多余的空格

这里有一些代码:

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.6 或更高版本,请使用 String#isEmpty
  • 你修剪它摆脱了字符串中间的空白?因为这些是“红蓝绿”之类的定义,所以我不希望它们变成“红蓝绿”
  • trim() 仅删除开头和结尾的字符 <= ' '。它不会删除所有空格,但会删除控制字符。
  • 谢谢,这真的消除了我对此的困惑。我不得不在字符串最终为空的块中添加一些额外的代码来处理多行定义的完整字符串。
【解决方案2】:

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

javadoc 说:

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

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

【讨论】:

    【解决方案3】:
    line = reader.readLine();
    if ("".equals(line)) {
       //this is and empty line...
    }
    

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

    【讨论】:

      【解决方案4】:

      这段代码 sn-ps 跳过空行,只打印有内容的行。

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

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

      【讨论】:

        【解决方案5】:
        try (BufferedReader originReader = getReader("now")) {
            if (StringUtils.isEmpty(originReader.readLine())) {
                System.out.printline("Buffer is empty");
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-16
          • 2012-07-09
          • 1970-01-01
          • 1970-01-01
          • 2013-12-27
          • 2021-03-03
          相关资源
          最近更新 更多