在java中的csv(delimeter作为逗号)字段值中包含逗号
我想创建一个csv文件,其中分隔符是逗号分隔的。当读取csv时,它会使s5字符串以逗号分隔。希望将s5字符串保留在单个列中在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
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()表明,引用包含逗号的字符串是很常见的。所以这是一个正确的解决方案。根本不是一个合适的解决方案-如果一个值有引号字符,它需要正确转义。