views:

67

answers:

3

Hi,

I am using buffered reader to grab a line at a time from a text file. I am trying to also get the line number from the text file using a tracking integer. Unfortunately BufferedReader is skipping empty lines (ones with just /n or the carriage return).

Is there a better way to solve this? Would using scanner work?

Example code:

int lineNumber = 0;
while ((s = br.readLine()) != null)
    {
    this.charSequence.add(s, ++lineNumber);
    }
+2  A: 

Have you looked at LineNumberReader? Not sure if that will help you.

http://download.oracle.com/javase/6/docs/api/java/io/LineNumberReader.html

Jim Tough
+6  A: 

I could not reproduce your claim that BufferedReader skips empty lines; it should NOT have.

Here are snippets to show that empty lines aren't just skipped.

java.io.BufferedReader

    String text = "line1\n\n\nline4";
    BufferedReader br = new BufferedReader(new StringReader(text));
    String line;
    int lineNumber = 0;
    while ((line = br.readLine()) != null) {
        System.out.printf("%04d: %s%n", ++lineNumber, line);
    }

java.io.LineNumberReader

    String text = "line1\n\n\nline4";
    LineNumberReader lnr = new LineNumberReader(new StringReader(text));
    String line;
    while ((line = lnr.readLine()) != null) {
        System.out.printf("%04d: %s%n", lnr.getLineNumber(), line);
    }

java.util.Scanner

    String text = "line1\n\n\nline4";
    Scanner sc = new Scanner(text);
    int lineNumber = 0;
    while (sc.hasNextLine()) {
        System.out.printf("%04d: %s%n", ++lineNumber, sc.nextLine());
    }

The output for any of the above snippets is:

0001: line1
0002: 
0003: 
0004: line4

Related questions

polygenelubricants
Doh, my bad. Found the problem code. Thanks guys, sorry for the poor question, should have looked into it more. Was stumped at that point.
Walt
Looks like I was trying to add the lines to a list but it wasn't keeping the returns. String s = null; this.charSequence = new LinkedList<String>(); while ((s = br.readLine()) != null) { this.charSequence.add(s); }
Walt
+1  A: 

It must be the FileReader class that skips newline characters then. I checked the results of readLine() again and it didn't include the new line symbol so it is happening between the two classes FileReader and BufferedReader.

BufferedReader br = null;
String s = null;

  try{
    br= new BufferedReader(new FileReader(fileName));
    while((s = br.readLine()) != null)
    {
      this.charSequence.add(s);
    }
  }
Walt
Java's API says: readLinepublic String readLine() throws IOExceptionRead a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed.Returns:A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reachedThrows:IOException - If an I/O error occurs
Walt