diff --git a/src/main/java/org/apache/commons/csv/ExtendedBufferedReader.java b/src/main/java/org/apache/commons/csv/ExtendedBufferedReader.java index 219fe68e..09f6fc2d 100644 --- a/src/main/java/org/apache/commons/csv/ExtendedBufferedReader.java +++ b/src/main/java/org/apache/commons/csv/ExtendedBufferedReader.java @@ -123,9 +123,7 @@ class ExtendedBufferedReader extends BufferedReader { String line = super.readLine(); if (line != null) { - if (line.length() > 0) { - lastChar = line.charAt(line.length() - 1); - } + lastChar = '\n'; // needed for detecting start of line lineCounter++; } else { lastChar = END_OF_STREAM; diff --git a/src/test/java/org/apache/commons/csv/CSVLexerTest.java b/src/test/java/org/apache/commons/csv/CSVLexerTest.java index 130f8121..8e288448 100644 --- a/src/test/java/org/apache/commons/csv/CSVLexerTest.java +++ b/src/test/java/org/apache/commons/csv/CSVLexerTest.java @@ -57,13 +57,15 @@ public class CSVLexerTest { @Test public void testNextToken2() throws IOException { final String code = - "1,2,3,\n"+ - "a,b x,c#no-comment\n"+ - "#foo\n"+ - "\n"+ - "d,e,#no-comment\n"+ - "# Final comment\n"; + "1,2,3,\n"+ // 1 + "a,b x,c#no-comment\n"+ // 2 + "#foo\n"+ // 3 + "\n"+ // 4 + "d,e,#no-comment\n"+ // 5 + "# penultimate comment\n"+ // 6 + "# Final comment\n"; // 7 CSVFormat format = CSVFormat.DEFAULT.withCommentStart('#'); + assertTrue("Should ignore empty lines", format.isEmptyLinesIgnored()); Lexer parser = getLexer(code, format); @@ -71,16 +73,17 @@ public class CSVLexerTest { assertTokenEquals(TOKEN, "1", parser.nextToken(new Token())); assertTokenEquals(TOKEN, "2", parser.nextToken(new Token())); assertTokenEquals(TOKEN, "3", parser.nextToken(new Token())); - assertTokenEquals(EORECORD, "", parser.nextToken(new Token())); + assertTokenEquals(EORECORD, "", parser.nextToken(new Token())); // 1 assertTokenEquals(TOKEN, "a", parser.nextToken(new Token())); assertTokenEquals(TOKEN, "b x", parser.nextToken(new Token())); - assertTokenEquals(EORECORD, "c#no-comment", parser.nextToken(new Token())); - assertTokenEquals(COMMENT, "", parser.nextToken(new Token())); - assertTokenEquals(EORECORD, "", parser.nextToken(new Token())); + assertTokenEquals(EORECORD, "c#no-comment", parser.nextToken(new Token())); // 2 + assertTokenEquals(COMMENT, "", parser.nextToken(new Token())); // 3 + // 4 empty line, ignored // 4 assertTokenEquals(TOKEN, "d", parser.nextToken(new Token())); assertTokenEquals(TOKEN, "e", parser.nextToken(new Token())); - assertTokenEquals(EORECORD, "#no-comment", parser.nextToken(new Token())); - assertTokenEquals(COMMENT, "", parser.nextToken(new Token())); + assertTokenEquals(EORECORD, "#no-comment", parser.nextToken(new Token())); // 5 + assertTokenEquals(COMMENT, "", parser.nextToken(new Token())); // 6 + assertTokenEquals(COMMENT, "", parser.nextToken(new Token())); // 7 assertTokenEquals(EOF, "", parser.nextToken(new Token())); assertTokenEquals(EOF, "", parser.nextToken(new Token()));