diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizer.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizer.java index ca6bc2920..c4af0ffc9 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizer.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizer.java @@ -211,7 +211,7 @@ public class DelimitedLineTokenizer extends AbstractLineTokenizer int start = offset; int len = count; - while ((start < (start + len)) && (chars[start] <= ' ')) { + while ((start < (start + len - 1)) && (chars[start] <= ' ')) { start++; len--; } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizerTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizerTests.java index 2dedcf767..f10cd6761 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizerTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizerTests.java @@ -46,6 +46,12 @@ public class DelimitedLineTokenizerTests { assertTrue(TOKEN_MATCHES, tokens.readString(1).equals("")); } + @Test + public void testBlankString() { + FieldSet tokens = tokenizer.tokenize(" "); + assertTrue(TOKEN_MATCHES, tokens.readString(0).equals("")); + } + @Test public void testInvalidConstructorArgument() { try { @@ -130,20 +136,20 @@ public class DelimitedLineTokenizerTests { FieldSet line = tokenizer.tokenize("a b c"); assertEquals(3, line.getFieldCount()); } - + @Test(expected=IllegalArgumentException.class) public void testDelimitedLineTokenizerNullDelimiter() { AbstractLineTokenizer tokenizer = new DelimitedLineTokenizer(null); tokenizer.tokenize("a b c"); } - + @Test(expected=IllegalArgumentException.class) public void testDelimitedLineTokenizerEmptyString() throws Exception { DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer(""); tokenizer.afterPropertiesSet(); tokenizer.tokenize("a b c"); } - + @Test public void testDelimitedLineTokenizerString() { AbstractLineTokenizer tokenizer = new DelimitedLineTokenizer(" b "); @@ -386,4 +392,4 @@ public class DelimitedLineTokenizerTests { assertEquals("value2\nvalue2cont", line.readString(1)); } -} \ No newline at end of file +}