[ https://issues.apache.org/jira/browse/CSV-259?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17058485#comment-17058485 ]
Chen commented on CSV-259: -------------------------- I found that the method {code:java} //代码占位符 printWithQuotes {code} {code:java} //代码占位符 builder.setLength(0); pos = -1; {code} after builder.setLength(0); following pos = -1; that will also pass the testcase > printWithEscapes gets StringIndexOutOfBoundsException when value is Reader > -------------------------------------------------------------------------- > > Key: CSV-259 > URL: https://issues.apache.org/jira/browse/CSV-259 > Project: Commons CSV > Issue Type: Bug > Components: Printer > Affects Versions: 1.8 > Environment: windows 10 > Reporter: Chen > Priority: Major > > {code:java} > //代码占位符 > @Test > public void testPrintWithEscapeReader() throws IOException { > final StringWriter sw = new StringWriter(); > final CSVFormat format = > CSVFormat.DEFAULT.withEscape('!').withQuoteMode(QuoteMode.NONE); > Reader reader = new > FileReader("src/test/resources/testPrintWithReader.txt"); > try (final CSVPrinter printer = new CSVPrinter(sw, format)) { > printer.print(reader); > assertEquals("q!,w!,e", sw.toString()); > } > } > {code} > and the values in testPrintWithReader.txt is > {code:java} > //代码占位符 > q,w,e > {code} > after tracing the code I think the problem cause by here > {code:java} > //代码占位符 > private void printWithEscapes(final Reader reader, final Appendable out) > throws IOException { > int start = 0; > int pos = 0; > final char delim = getDelimiter(); > final char escape = getEscapeCharacter().charValue(); > final StringBuilder builder = new > StringBuilder(IOUtils.DEFAULT_BUFFER_SIZE); > int c; > while (-1 != (c = reader.read())) { > builder.append((char) c); > if (c == CR || c == LF || c == delim || c == escape) { > // write out segment up until this char > if (pos > start) { > out.append(builder.substring(start, pos)); > builder.setLength(0); > } > if (c == LF) { > c = 'n'; > } else if (c == CR) { > c = 'r'; > } > out.append(escape); > out.append((char) c); > start = pos + 1; // start on the current char after this one > } > pos++; > } > // write last segment > if (pos > start) { > out.append(builder.substring(start, pos)); > } > } > {code} > that line > {code:java} > //代码占位符 > builder.setLength(0); > {code} > will cause the exception. After delete that line , the testcase will passed. > is that a bug? may be I could contribute to it -- This message was sent by Atlassian Jira (v8.3.4#803005)