用双引号将每个字符串括在逗号分隔的字符串中

Posted

技术标签:

【中文标题】用双引号将每个字符串括在逗号分隔的字符串中【英文标题】:Enclose each string in a comma separated string in double quotes 【发布时间】:2022-01-13 17:19:31 【问题描述】:

我正在处理一个要求,即我需要将单个字符串括在双引号中的逗号分隔字符串中,同时保留空字符串。

例如:字符串 the,quick,brown,,,,,fox,jumped,,,over,the,lazy,dog 应转换为 "the","quick ","brown",,,,,"fox","jumped",,,"over","the","lazy","dog"

我有这段代码有效。但想知道是否有更好的方法来做到这一点。顺便说一句,我在 JDK 8 上。

String str = "the,quick,brown,,,,,fox,jumped,,,over,the,lazy,dog";
//split the string
List<String> list = Arrays.asList(str.split(",", -1));
// add double quotes around each list item and collect it as a comma separated string
String strout = list.stream().collect(Collectors.joining("\",\"", "\"", "\""));
//replace two consecutive double quotes with a empty string
strout = strout.replaceAll("\"\"", "");
System.out.println(strout);

【问题讨论】:

您可以使用正则表达式在一行中执行此操作:String strout = str.replaceAll("(\\w+)", "\"$1\""); 来源:Re-add strings with qoutations - Mason Smith 如果使用 encodeURI (***.com/questions/607176/…),您正在做的事情会更安全/更强大 str.replaceAll("[^,]+", "\"$0\"") 【参考方案1】:

你可以使用splitstream

public static String covert(String str) 
    return Arrays.stream(str.split(","))
            .map(s -> s.isEmpty() ? s : '"' + s + '"')
            .collect(Collectors.joining(","));

然后:

String str = "the,quick,brown,,,,,fox,jumped,,,over,the,lazy,dog";

System.out.println(covert(str));

输出:

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

【讨论】:

@Holger 也许我没有正确理解您的评论,但是如果您在 .filter(s -&gt;!s.isEmpty()) 前面添加空字符串,您将无法获得所需的输出(您不会获得 ,,, )。如果您使用原始代码.collect(Collectors.joining("\",\"", "\"", "\"")) 考虑到空字符串,您也不会得到所需的输出(即,"","", 而不是,,,)。有什么我想念的吗? 不,这是一个完美的解释。考虑到这些因素,仍然可能存在避免多个字符串连接的流解决方案,但它会比您的更复杂。因此,如果它必须是流解决方案而不是例如replaceAll 变体张贴在问题下方的 cmets 中,您的问题直截了当。

以上是关于用双引号将每个字符串括在逗号分隔的字符串中的主要内容,如果未能解决你的问题,请参考以下文章

将字符串写入 CSV 时转义逗号

如何使用Java为列表中的每个字符串添加或插入'(单引号),其中字符串用逗号分隔

如何在 Amazon Redshift 的列中取消嵌套/展开/展平逗号分隔值?

将逗号分隔值转换为双引号逗号分隔字符串

csv文件

Java:拆分逗号分隔的字符串但忽略引号中的逗号