gpt4 book ai didi

java - 在 Java 中用逗号或双引号对分割字符串的优雅算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:24:40 25 4
gpt4 key购买 nike

这个问题很简单。


CSV 文件如下所示:

1, "John", "John Joy"

如果我想获取每一列,我只需使用 String[] splits = line.split(",");


如果 CSV 文件看起来像这样怎么办:

1, "John", "Joy, John"

所以我们在双引号对中有一个逗号。上面的拆分将不再有效,因为我想要“Joy, John”作为一个完整的部分。


那么有没有优雅/简单的算法来处理这种情况呢?


编辑:

请不要将其视为正式的 CSV 解析。我只是将 CSV 用作需要拆分的用例。

我真正想要的不是一个合适的 CSV 解析器,相反,我只想要一个算法,它可以在考虑双引号的情况下用逗号正确地分割一行。

最佳答案

最好为此目的使用现有库而不是编写自定义实现(如果您不这样做是为了学习)。因为 CSV 有一些您在自定义实现中可能会遗漏的细节,而且通常库都经过了很好的测试。

在这里你可以找到一些好的Can you recommend a Java library for reading (and possibly writing) CSV files?

编辑

我已经创建了可以解析您的字符串的方法,但它可能无法完美运行,因为我没有很好地测试它。它可以作为您的起点,您可以进一步改进它。

    String inputString = "1, \"John\",\"Joy, John\"";
char quote = '"';
List<String> csvList = new ArrayList<String>();
boolean inQuote = false;
int lastStart = 0;
for (int i = 0; i < inputString.length(); i++) {
if ((i + 1) == inputString.length()) {
//if this is the last character
csvList.add(inputString.substring(lastStart, i + 1));
}
if (inputString.charAt(i) == quote) {
//if the character is quote
if (inQuote) {
inQuote = false;
continue; //escape
}
inQuote = true;
continue;
}
if (inputString.charAt(i) == ',') {
if (inQuote) continue;
csvList.add(inputString.substring(lastStart, i));
lastStart = i + 1;
}
}
System.out.println(csvList);

你的问题

如果你得到这样的字符串怎么办 1, "John", ""Joy, John""(关于“Joy, John”的两句话)?

关于java - 在 Java 中用逗号或双引号对分割字符串的优雅算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13563972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com