1

我在文件中有一条消息,如下所示,我com.univocity.parsers.csv.CsvParser用来根据分隔符拆分字符串(在本例中为-

1-bc-“名称”-def-address

1-abc-"名称-定义-地址

我创建我的CsvParser对象

private val settings = new CsvParserSettings()
settings.getFormat.setDelimiter('-')
settings.setIgnoreLeadingWhitespaces(true)
settings.setIgnoreTrailingWhitespaces(true)
settings.setReadInputOnSeparateThread(false)
settings.setNullValue("")
settings.setMaxCharsPerColumn(-1)
val parser = new CsvParser(settings)

并解析输入消息,如:

    for (line <- Source.fromFile("path\\test.txt").getLines) {
  println(parser.parseLine(line).toList)
}

输出是:

List(1, bc, name, def, address)
List(1, abc, name-def-address)

如果您看到输出,您可以看到对于第一条消息,字符串被正确拆分,但是对于第二条消息,它在第一个双引号之后将所有内容都作为一个值。有谁知道为什么会出现这样的行为以及如何获得所需的输出?我正在阅读每条消息作为一个字符串,它应该简单地将引号/双引号视为一个字符。

4

1 回答 1

1

这个图书馆的作者在这里。当在-分隔符之后找到引号时,解析器将尝试查找结束引号。

解决这个问题的最简单方法是让解析器简单地忽略引号:

settings.getFormat().setQuote('\0');

希望能帮助到你。

于 2019-03-01T00:42:50.320 回答