Java 如何自动添加双引号,将字符串列表转换为逗号分隔的值

Java 如何自动添加双引号,将字符串列表转换为逗号分隔的值,java,Java,假设我有一个字符串列表 List<String> s = new ArrayList<>(); s.add("one"); s.add("two"); s.add("three"); 而我需要输出为 "one","two","three" 我们不喜欢使用Guava实用程序,因为项目未处于活动状态 可以通过ApacheCommons实用程序实现吗 如何通过实用程序实现这一点,而不是编写自己的逻辑来实现这一点?只需使用: 文档示例: String message = S

假设我有一个字符串列表

List<String> s = new ArrayList<>();
s.add("one");
s.add("two");
s.add("three");
而我需要输出为

"one","two","three"
我们不喜欢使用Guava实用程序,因为项目未处于活动状态

可以通过ApacheCommons实用程序实现吗

如何通过实用程序实现这一点,而不是编写自己的逻辑来实现这一点?

只需使用:

文档示例:

 String message = String.join("-", "Java", "is", "cool");
 // message returned is: "Java-is-cool"
您可以执行以下操作:

List<String> list = Arrays.asList("one", "two", "three");
res = String.join(",", list).replaceAll("([^,]+)", "\"$1\"");
List List=Arrays.asList(“一”、“二”、“三”);
res=String.join(“,”,list).replaceAll(“([^,]+)”,“\“$1\”);
replaceAll
接受一个正则表达式,该正则表达式捕获所有不包含“,”(分隔符)的内容,并用双引号将其括起来

如果您的输入包含逗号,则可以首先在arraylist上迭代并为每个元素添加引号,然后才使用
join

String joined = s.stream()
    .map(plain -> '"' + StringEscapeUtils.escapeJava(plain) + '"')
    .collect(Collectors.joining(", "));
其思想是首先将每个字符串转换为正确引用的表示形式,然后将它们连接起来


您必须自己决定使用哪个转义函数。为了防止生成CSV文件,您应该真正使用一些
CsvWriter
类。

您可以只使用
StringUtils
分两步完成

List<String> s = new ArrayList<>();
s.add("one");
s.add("two");
s.add("three");

String step1 = StringUtils.join(s, "\", \"");// Join with ", "
String step2 = StringUtils.wrap(step1, "\"");// Wrap step1 with "

System.out.println(step2);

但是
当使用$in运算符时,我需要在mongo DB查询中传递它们

对于
mongodb
查询,您不需要以这种方式构建它,特别是在
$in
的情况下,您可以按照以下方式查询文档:

BasicDBObject yourInQuery = new BasicDBObject();
yourInQuery.put("in_column", new BasicDBObject("$in", yourList));
DBCursor cursor = collection.find(yourInQuery);
请在下面的链接中阅读更多信息


结合前两个答案:

var s = new ArrayList<String>();
s.add("one");
s.add("two");
s.add("three");

var resultString = s.stream()
                    .map(s -> StringUtils.wrap(s, "\"")
                    .collect(Collectors.joining(", "));
var s=newarraylist();
s、 添加(“一”);
s、 添加(“两”);
s、 添加(“三”);
var resultString=s.stream()
.map->StringUtils.wrap(s,“\”)
.collect(收集器。连接(“,”);

注意:这使用Java 8和apache commons。

“编写自己的逻辑“在这种情况下,这是实现目标的最快方法。它只有3行……您忘了告诉为什么要用这种方式编写字符串。您需要生成Java代码、JavaScript代码或CSV文件吗?当使用$in运算符时,我需要在mongo DB查询中传递它们。设计输出:
“一”、“二”、“三”
我认为
regex
可以在这里起到一些重要作用。如果字符串也包含逗号呢?当列表包含更多字符串时,这不是一个昂贵的操作吗?@RolandIllig我想不会,你的方法更好。当使用$in运算符时,我需要在mongo DB查询中传递它们。mongodb没有查询参数吗?看起来是这样就像一股气味。请看这个JB Nizet-当列表包含更多字符串时,这不是一个昂贵的操作吗?@Kathiresa是的,唯一额外的操作将是用
包装连接的字符串。在步骤1中,您将有
一、二、三个
,而在步骤2中,您只需要用
包装它。”
。非常感谢,它解决了问题。两者都有很好的清晰度。很好的一个任务。。。
BasicDBObject yourInQuery = new BasicDBObject();
yourInQuery.put("in_column", new BasicDBObject("$in", yourList));
DBCursor cursor = collection.find(yourInQuery);
var s = new ArrayList<String>();
s.add("one");
s.add("two");
s.add("three");

var resultString = s.stream()
                    .map(s -> StringUtils.wrap(s, "\"")
                    .collect(Collectors.joining(", "));