【问题标题】:How to handle commas in the data of a csv in Java如何在 Java 中处理 csv 数据中的逗号
【发布时间】:2013-04-05 11:20:17
【问题描述】:

我正在使用scanner.delimiter 来拆分我的csv,分隔符是“,”。但是,我有一些数据在数据中包含逗号,例如“Monsters, Inc.”

但是,如果我将分隔符设置为“\”,\“”,那么它会在其他所有内容上崩溃。

不需要我编写自己的scanner.delimiter方法的想法?

【问题讨论】:

标签: java csv java.util.scanner


【解决方案1】:

我认为scanner.delimiter 不适用于此类问题。 如果您在存在额外逗号的数据中有引号,您可以使用正则表达式或代码来解决此类问题,也可以使用类似答案/问题中提到的 String.split。 如果你没有报价,那你真的无能为力。

stackoverflow 上有类似的例子。 例如,我认为这个适用于你:

Splitting a csv file with quotes as text-delimiter using String.split()

使用拆分

public static void main(String[] args) {
    String s = "Sachin,,M,\"Maths,Science,English\",Need to improve in these subjects.";
    String[] splitted = s.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
    System.out.println(Arrays.toString(splitted));
}

使用自定义代码

public static ArrayList<String> customSplitSpecific(String s)
{
    ArrayList<String> words = new ArrayList<String>();
    boolean notInsideComma = true;
    int start =0, end=0;
    for(int i=0; i<s.length()-1; i++)
    {
        if(s.charAt(i)==',' && notInsideComma)
        {
            words.add(s.substring(start,i));
            start = i+1;                
        }   
        else if(s.charAt(i)=='"')
        notInsideComma=!notInsideComma;
    }
    words.add(s.substring(start));
    return words;
}   

【讨论】:

  • 不要复制另一个问题的答案,只是评论指出它是重复的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 2017-10-22
  • 1970-01-01
  • 2018-11-26
相关资源
最近更新 更多