2010-03-09 3 views
1

Я работаю над проектом, в котором я должен читать в файле грамматики (разбивая его на мою структуру данных) с целью создания случайного «DearJohnLetter».Java: как определить, должна ли строка в текстовом файле быть пустой?

Моя проблема в том, что при чтении в TXT-файле я не знаю, как узнать, должен ли файл быть полностью пустой или нет, что вредно для программы.

Ниже приведен пример части файла. Как узнать, должна ли следующая строка быть пустой строкой? (Кстати, я просто использую буферизованный читатель) Спасибо!


<start> 
I have to break up with you because <reason> . But let's still <disclaimer> . 

<reason> 
<dubious-excuse> 
<dubious-excuse> , and also because <reason> 

<dubious-excuse> 
my <person> doesn't like you 
I'm in love with <another> 
I haven't told you this before but <harsh> 
I didn't have the heart to tell you this when we were going out, but <harsh> 
you never <romantic-with-me> with me any more 
you don't <romantic> any more 
my <someone> said you were bad news 
+0

Короче говоря: вы просто хотите, чтобы определить, в 'BufferedReader # ReadLine()' петли ли строка * next * пуста ('line.isEmpty() == true') или нет? – BalusC

+0

Если вы можете изменить текст, я бы использовал что-то вроде '% REASON', чтобы уведомить вас, где вы можете поменять место по причине. Это может быть лучший подход к поиску пустых строк. –

+0

@BalusC То, что я в основном пытаюсь сделать, но по какой-то причине он никогда не читает строку как пустую (за исключением последней строки, которая всегда равна нулю) Не работает:/ @ Энтони Да, я могу ее изменить. Хм, это должно позволить мне закончить оставшуюся часть программы, спасибо :) Тем не менее, любой знает способ сделать то же самое без тега, чтобы действовать как пустая строка? – defn

ответ

1

Если я понимаю, что вы правы, вы просто хотите, чтобы определить внутри линии, является ли следующая строка пуста?

Если так, то вот зарезка пример:

package com.stackoverflow.q2405942; 

import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class Test { 

    public static void main(String... args) throws IOException { 
     BufferedReader reader = null; 
     try { 
      reader = new BufferedReader(new InputStreamReader(new FileInputStream("/test.txt"))); 
      for (String next, line = reader.readLine(); line != null; line = next) { 
       next = reader.readLine(); 
       boolean nextIsBlank = next != null && next.isEmpty(); 
       System.out.println(line + " -- next line is blank: " + nextIsBlank); 
      } 
     } finally { 
      if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {} 
     } 
    } 

} 

Это печатает следующее:

<start> -- next line is blank: false 
I have to break up with you because <reason> . But let's still <disclaimer> . -- next line is blank: true 
-- next line is blank: false 
<reason> -- next line is blank: false 
<dubious-excuse> -- next line is blank: false 
<dubious-excuse> , and also because <reason> -- next line is blank: true 
-- next line is blank: false 
<dubious-excuse> -- next line is blank: false 
my <person> doesn't like you -- next line is blank: false 
I'm in love with <another> -- next line is blank: false 
I haven't told you this before but <harsh> -- next line is blank: false 
I didn't have the heart to tell you this when we were going out, but <harsh> -- next line is blank: false 
you never <romantic-with-me> with me any more -- next line is blank: false 
you don't <romantic> any more -- next line is blank: false 
my <someone> said you were bad news -- next line is blank: false 
+0

Wow thanks, да, я должен уметь использовать эту основную логику. (То, что я на самом деле делаю, проходит через файл и превращает первую строку в «NonTerminal Symbol», а затем все строки после что вплоть до пробелов являются «производством» или вещами, которые он может стать) Затем продолжайте, что для каждой части, спасибо :) – defn

+0

Добро пожаловать. – BalusC