supercsv 中看似随机的 StringIndexOutOfBoundsException
Seemingly random StringIndexOutOfBoundsException in supercsv
我在我的 scala 代码中使用了一个 supercsv 库
for (row <- readyData) { // tried foreach and map too
listWriter.write(row)
}
其中 readyData
是 Seq[java.util.List[String]]
而 listWriter
是 CsvListWriter
。我有时会
java.lang.StringIndexOutOfBoundsException: String index out of range: -2
at java.lang.String.<init>(String.java:197)
at java.lang.StringBuilder.toString(StringBuilder.java:405)
at org.supercsv.encoder.DefaultCsvEncoder.encode(DefaultCsvEncoder.java:93)
at org.supercsv.io.AbstractCsvWriter.escapeString(AbstractCsvWriter.java:102)
at org.supercsv.io.AbstractCsvWriter.writeRow(AbstractCsvWriter.java:196)
at org.supercsv.io.AbstractCsvWriter.writeRow(AbstractCsvWriter.java:146)
at org.supercsv.io.CsvListWriter.write(CsvListWriter.java:71)
at com.optrak.data.writing.CsvWriting$CsvFileWriter$$anonfun$write.apply(CsvWriting.scala:42)
有时
java.lang.ArrayIndexOutOfBoundsException: -28
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:588)
at java.lang.StringBuilder.append(StringBuilder.java:214)
at org.supercsv.encoder.DefaultCsvEncoder.encode(DefaultCsvEncoder.java:81)
at org.supercsv.io.AbstractCsvWriter.escapeString(AbstractCsvWriter.java:102)
at org.supercsv.io.AbstractCsvWriter.writeRow(AbstractCsvWriter.java:196)
at org.supercsv.io.AbstractCsvWriter.writeRow(AbstractCsvWriter.java:146)
at org.supercsv.io.CsvListWriter.write(CsvListWriter.java:71)
at com.optrak.data.writing.CsvWriting$CsvFileWriter$$anonfun$write.apply(CsvWriting.scala:42)
具有不同的越界索引,通常为负数。显示的最后一个堆栈帧(省略了完整输出)指向上述代码的第 2 行。我实际上在 2 个不同的 specs2 测试用例中使用代码。有时两个都失败,有时一个。如果我在两个测试用例中都出现异常,则超出范围的索引相同或相差一个。是什么导致了这种看似随机的行为,我怎样才能找到原因并使其可预测?
我在我的 scala 代码中使用了一个 supercsv 库
for (row <- readyData) { // tried foreach and map too
listWriter.write(row)
}
其中 readyData
是 Seq[java.util.List[String]]
而 listWriter
是 CsvListWriter
。我有时会
java.lang.StringIndexOutOfBoundsException: String index out of range: -2
at java.lang.String.<init>(String.java:197)
at java.lang.StringBuilder.toString(StringBuilder.java:405)
at org.supercsv.encoder.DefaultCsvEncoder.encode(DefaultCsvEncoder.java:93)
at org.supercsv.io.AbstractCsvWriter.escapeString(AbstractCsvWriter.java:102)
at org.supercsv.io.AbstractCsvWriter.writeRow(AbstractCsvWriter.java:196)
at org.supercsv.io.AbstractCsvWriter.writeRow(AbstractCsvWriter.java:146)
at org.supercsv.io.CsvListWriter.write(CsvListWriter.java:71)
at com.optrak.data.writing.CsvWriting$CsvFileWriter$$anonfun$write.apply(CsvWriting.scala:42)
有时
java.lang.ArrayIndexOutOfBoundsException: -28
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:588)
at java.lang.StringBuilder.append(StringBuilder.java:214)
at org.supercsv.encoder.DefaultCsvEncoder.encode(DefaultCsvEncoder.java:81)
at org.supercsv.io.AbstractCsvWriter.escapeString(AbstractCsvWriter.java:102)
at org.supercsv.io.AbstractCsvWriter.writeRow(AbstractCsvWriter.java:196)
at org.supercsv.io.AbstractCsvWriter.writeRow(AbstractCsvWriter.java:146)
at org.supercsv.io.CsvListWriter.write(CsvListWriter.java:71)
at com.optrak.data.writing.CsvWriting$CsvFileWriter$$anonfun$write.apply(CsvWriting.scala:42)
具有不同的越界索引,通常为负数。显示的最后一个堆栈帧(省略了完整输出)指向上述代码的第 2 行。我实际上在 2 个不同的 specs2 测试用例中使用代码。有时两个都失败,有时一个。如果我在两个测试用例中都出现异常,则超出范围的索引相同或相差一个。是什么导致了这种看似随机的行为,我怎样才能找到原因并使其可预测?