2010-03-09 13 views
1

Je travaille sur un projet dans lequel je dois lire un fichier grammaire (en le décomposant dans ma structure de données), dans le but de pouvoir générer une "DearJohnLetter" aléatoire. Mon problème est que lors de la lecture dans le fichier. Txt, je ne sais pas comment savoir si le fichier était censé être une ligne complètement vide ou non, ce qui est préjudiciable au programme.Java: comment savoir si une ligne dans un fichier texte était supposée être vide?

Voici un exemple d'une partie du fichier, Comment puis-je savoir si la ligne suivante était censée être une ligne vide? (BTW j'utilise juste un lecteur tamponné) Merci!


<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

En bref: vous voulez juste déterminer dans une boucle 'BufferedReader # readLine()' si la ligne * next * est vide ('line.isEmpty() == true') ou non? – BalusC

+0

Si vous pouvez modifier le texte, j'utiliserais quelque chose comme '% REASON' pour vous indiquer où vous pouvez échanger une raison. Ce pourrait être une meilleure approche pour trouver des lignes vides. –

+0

@BalusC C'est ce que j'essaie de faire, mais pour une raison quelconque, il ne lit jamais une ligne vide (sauf la dernière ligne qui est toujours nulle) Ne fonctionne pas:/ @Anthony Oui, je peux le modifier. Hmm cela devrait me permettre de finir le reste du programme, merci :) Cela dit, quelqu'un sait-il une façon de faire la même chose sans étiquette pour agir comme la ligne vide? – defn

Répondre

1

Si je vous comprends bien, vous voulez juste déterminer dans une ligne si la ligne suivante est vide?

Si cela est vrai, alors voici un exemple coup d'envoi:

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) {} 
     } 
    } 

} 

Imprime les éléments suivants:

<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 merci, ouais je devrais être capable d'utiliser cette logique de base. (Ce que je fais réellement est de passer par le fichier et de transformer la première ligne en un "symbole non-terminal" et ensuite toutes les lignes après que jusqu'à l'espace sont des "productions", ou des choses qu'il peut devenir) Alors continuez pour chaque partie, merci :) – defn

+0

De rien. – BalusC

Questions connexes