我想创建一个 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\"";
正如其他答案提到的那样,您实际上必须考虑许多特殊情况,最典型的两种特殊情况是:逗号和双引号。
如 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"""
至于其他特殊情况,您需要根据您当前的情况进行处理。也许它们可以被忽略,也许不能。
要在数据中包含分隔符,您必须在生成的 csv 中用双引号将该字段引起来:
quick,brown,fox,jump,"over,the,lazy,dog"
如果某些字段中有双引号,则必须转义:
123,"24"" monitor, Samsung",456 // Windows style
123,"24\" monitor",456 // Linux style
您不必引用所有字段,只需引用那些包含分隔符或双引号(或换行符)的字段即可。
有关 csv 通用格式的更多详细信息,请参阅 RFC4180。
除非你正在做一些作业,否则你绝对需要一个 CSV 库来为你处理这个问题。您还需要关心值中的行结尾和其他引号,而不仅仅是分隔符
使用 univocity-parsers 尝试以下代码:
CsvWriterSettings settings = new CsvWriterSettings();
CsvWriter writer = new CsvWriter(settings);
String result = writer.writeRowToString(s1,s2,s3,s4,s5);
希望这有帮助。
免责声明:我是这个库的作者。它是开源且免费的(Apache 2.0 许可证)