Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中的csv(delimeter作为逗号)字段值中包含逗号_Java_String_Csv_Delimiter_Core - Fatal编程技术网

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

在java中的csv(delimeter作为逗号)字段值中包含逗号,java,string,csv,delimiter,core,Java,String,Csv,Delimiter,Core,我想创建一个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

我想创建一个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);

有人能帮我吗,因为我对字符串不熟悉。

我想你需要把它们加在一个双字符串中

试试这个:

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

我想你需要把它们加在一个双字符串中

试试这个:

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

要在数据中包含分隔符,必须在生成的csv中用双引号将字段括起来:

quick,brown,fox,jump,"over,the,lazy,dog"
如果某些字段中有双引号,则必须转义:

123,"24"" monitor, Samsung",456  // Windows style
123,"24\" monitor",456           // Linux style
您不必引用所有字段,只需引用那些包含分隔符或双引号(或换行符)的字段


有关csv通用格式的更多详细信息,请参阅。

要在数据中包含分隔符,必须在生成的csv中用双引号括起字段:

quick,brown,fox,jump,"over,the,lazy,dog"
如果某些字段中有双引号,则必须转义:

123,"24"" monitor, Samsung",456  // Windows style
123,"24\" monitor",456           // Linux style
您不必引用所有字段,只需引用那些包含分隔符或双引号(或换行符)的字段


参见CSV公共格式的更多细节。

< P>正如所提到的其他答案,您必须考虑许多特殊情况,最典型的两个特殊情况是:逗号和双引号。 如附件所示,已明确规定格式如下:

要处理这两种情况,您可以尝试以下方法:

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;
    }
}

至于其他特殊情况,您需要根据您当前的情况进行处理。也许它们可以被忽略,也许不能

要处理这两种情况,您可以尝试以下方法:

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;
    }
}

至于其他特殊情况,您需要根据您当前的情况进行处理。也许它们可以被忽略,也许不能

除非你在玩弄一些任务,否则你绝对需要一个CSV库来为你处理这些任务。您还需要关注值中的行尾和其他引号,而不仅仅是分隔符

使用以下命令尝试以下代码:

希望这有帮助


免责声明:我是这个图书馆的作者。它是开源和免费的(Apache2.0许可证)

除非您正在处理一些任务,否则您绝对需要一个CSV库来为您处理这些任务。您还需要关注值中的行尾和其他引号,而不仅仅是分隔符

使用以下命令尝试以下代码:

希望这有帮助


免责声明:我是这个图书馆的作者。它是开源和免费的(Apache 2.0许可证)

查看Wikipedia页面上的CSV()可以发现,引用包含逗号的字符串是很常见的。因此,这是一个合适的解决方案。根本不是一个合适的解决方案-如果一个值包含引号字符,则需要对其进行正确转义。检查Wikipedia页面的CSV()表明,引用包含逗号的字符串是很常见的。所以这是一个正确的解决方案。根本不是一个合适的解决方案-如果一个值有引号字符,它需要正确转义。