Вопрос по java, io, whitespace, bufferedreader – Как мне узнать, была ли прочитана пустая строка с BufferedReader?

5

м чтение в текстовом файле форматируется как

word
definiton

word
definition
definition

word
definition

Так что мне нужно продолжать пытаться ли ям в определении или не на основе того, когда я достигну этих строк emtpy. Дело в том,BufferedReader выброс рыбы\n символы, и как-то сравнивая эту пустую строку сString "" не регистрируется так, как я думал. Как я могу сделать это?

Пожалуйста, не ставьте теги в заголовках. SLaks

Ваш Ответ

5   ответов
1
line = reader.readLine();
if ("".equals(line)) {
   //this is and empty line...
}

Я не знаю, как вы пытались проверить, что строка пуста, поэтому я не могу объяснить, почему она не работает для вас. Возможно, вы использовали== для сравнения? В этом случае это не сработало, потому что== сравнивает ссылки, а не содержимое объекта.

5

BufferedReader.readLine() возвращает пустую строку, если строка пуста.

Javadoc говорит:

Возвраты: строка, содержащая содержимое строки, не включая символы окончания строки, или ноль, если достигнут конец потока.

Если вы неПохоже, что вы видите пустую строку, либо строка не пустая, либо вы неправильно проверяете наличие пустой строки.

0

которые содержат содержимое.

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

Строки, содержащие только пробельные символы, также пропускаются.

17
Убедитесь, что вы используете:myString.equals("") неmyString == "", После 1.6 вы можете использоватьmyString.isEmpty()Ты можешь использовать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);
    }
  }
}
Вы обрезаете его, чтобы избавиться от пустого пространства в середине строки? Потому что это такие определения, как "красный синий зеленый Я не хочу, чтобы они сталиredbluegreen» Aerlusch
trim () удаляет только символы Peter Lawrey
если 1.6 или выше, используйте.String#isEmpty mre
Спасибо, это действительно прояснило мою путаницу по этому поводу. Мне пришлось добавить дополнительный код в блок, где строка заканчивается пустой для обработки завершенной строки многострочного определения. Aerlusch
-1
try (BufferedReader originReader = getReader("now")) {
    if (StringUtils.isEmpty(originReader.readLine())) {
        System.out.printline("Buffer is empty");
    }

Похожие вопросы