supercsv 中看似随机的 StringIndexOutOfBoundsException

Seemingly random StringIndexOutOfBoundsException in supercsv

我在我的 scala 代码中使用了一个 supercsv 库

for (row <- readyData) { // tried foreach and map too
  listWriter.write(row)  
}

其中 readyDataSeq[java.util.List[String]]listWriterCsvListWriter。我有时会

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 测试用例中使用代码。有时两个都失败,有时一个。如果我在两个测试用例中都出现异常,则超出范围的索引相同或相差一个。是什么导致了这种看似随机的行为,我怎样才能找到原因并使其可预测?

它看起来像是最新版本 (2.2.1) 中 this bug which has been fixed 的实例。