在java中,在csv的字段值中包含逗号(delimeter作为逗号)

epfja78i  于 5个月前  发布在  Java
关注(0)|答案(4)|浏览(58)

我想创建一个CSV文件,其中的字符串是逗号分隔。而CSV是读它使逗号分隔的S5字符串。想保持在单列S5字符串。

String s1="quick";
   String s2="brown";
   String s3="fox";
   String s4="jump";
   String s5="over,the,lazy,dog";

  String csvRecord = String.format("%s,%s,%s,%s,%s", s1,s2,s3,s4,s5);

字符串
有人能帮我吗,因为我是新来的。

xbp102n0

xbp102n01#

我认为你需要把它们放在一个双字符串中。
试试这个:

String s5="\"over,the,lazy,dog\"";

字符串

bpsygsoo

bpsygsoo2#

正如其他答案所提到的,你必须考虑许多特殊情况,最典型的两种特殊情况是:逗号和双引号。
如Chewtoy所附,CSV wiki已明确指定格式为:


的数据

Year,Make,Model,Description,Price
1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition""","",4900.00
1999,Chevy,"Venture ""Extended Edition, Very Large""",,5000.00
1996,Jeep,Grand Cherokee,"MUST SELL!
air, moon roof, loaded",4799.00

字符串
要处理这两种情况,您可以尝试以下操作:

public class CsvAddComma {
    public static void main(String... args) {
        List<String> list = new ArrayList<>();
        list.add("quick");
        list.add("over,the,lazy,dog");
        list.add("Venture \"Extended Edition, Very Large\"");
        list.stream()
                .map(s -> convertToCsvFormat(s))
                .forEach(System.out::println);
    }

    private static String convertToCsvFormat(String input) {
        if (input.contains("\"")) {
            input = input.replaceAll("\"", "\"\"");
        }
        if (input.contains(",")) {
            input = String.format("\"%s\"", input);
        }
        return input;
    }
}


输出:

quick
"over,the,lazy,dog"
"Venture ""Extended Edition, Very Large"""


至于其他的特殊情况,你需要根据你现在的情况来处理,也许可以忽略,也许不可以。

vd2z7a6w

vd2z7a6w3#

要在数据中包含一个CSV,您必须在结果CSV中用双引号将字段括起来:

quick,brown,fox,jump,"over,the,lazy,dog"

字符串
如果某些字段中有双引号,则必须对其进行转义:

123,"24"" monitor, Samsung",456  // Windows style
123,"24\" monitor",456           // Linux style


你不必把所有的字段都用引号引起来,只需要那些包含一个双引号或一个双引号(或一个换行符)的字段。
有关csv通用格式的更多详细信息,请参阅RFC4180

shstlldc

shstlldc4#

除非你正在玩弄一些赋值,否则你绝对需要一个CSV库来处理这个问题。
univocity-parsers中尝试以下代码:

CsvWriterSettings settings = new CsvWriterSettings();
CsvWriter writer = new CsvWriter(settings);
String result = writer.writeRowToString(s1,s2,s3,s4,s5);

字符串
希望这能帮上忙。
免责声明:我是这个库的作者。它是开源和免费的(Apache 2.0许可证)

相关问题