首页 > 解决方案 > 通过排除双引号内的逗号来拆分字符串

问题描述

我特别有这个字符串:

123,abc,true,true,true,false,true,false,false,false,123,"my name is : something('Jack'), email is 'abc@gmail.com' 已提供。公司政策'xyz',是有益的。",ABCD,591633,1

我想通过排除双引号内的逗号来用逗号分割字符串。所以我想在这里产生的输出是

[123, abc, true, true, true, false, true, false, false, false, 123, "my name is : something('Jack') email is 'abc@gmail.com' 已提供公司政策'xyz' 是有益的。”,ABCD,591633,1]

我曾尝试使用其他 stackoverflow 帖子的答案,但它们不适用于此类字符串。谁能帮助我如何实现这一目标?

我正在尝试在 Kotlin 中实现这一点。

我能想到的一种方法是,首先去掉双引号内的逗号,然后用逗号分割字符串,但无法得到预期的结果。

标签: regexstringkotlinsplitregexp-replace

解决方案


由于您正在尝试解析CSV文件,因此使用现有库几乎总是比编写自己的代码要好得多。优点包括:

  • 它可以处理您没有时间了解或支持的所有极端情况和微妙之处。例如,如果双引号字符本身被引用会怎样?如果分隔符是分号、制表符、空格或逗号以外的东西怎么办?(是的,它仍然被称为 CSV,令人困惑。例如,Excel 在某些以逗号作为小数分隔符的语言环境中写入分号。)标题、换行符、注释行、空白行、转义序列呢?你能处理和测试不同程序编写的所有不同的 CSV 方言吗?
  • 它已经过彻底的测试,并被无数用户证明。
  • 它会在标准更改、发现错误或可以提高性能时进行更新。
  • 它很常用,因此其他开发人员可能熟悉它。

一个例子是 Apache Commons CSV,它是免费的、开源的,并且很容易包含在任何 Maven 或 Gradle 项目中。


推荐阅读