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

时间:2016-08-22 06:31:35

标签: java

假设我有一个字符串列表。

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

当我使用StringUtils.join(",", s)时,它会将结果显示为

"one, two, three"

而我需要输出

"one","two","three"

我们不喜欢使用Guava实用程序,因为项目不处于活动状态。

是否可以通过Apache Commons实用程序?

如何通过实用程序实现此目的,而不是编写自己的逻辑来做同样的事情?

4 个答案:

答案 0 :(得分:6)

您可以仅使用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);

输出,

"one", "two", "three"

BUT

  

使用$ in运算符时需要在mongo数据库查询中传递它们

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

BasicDBObject yourInQuery = new BasicDBObject();
yourInQuery.put("in_column", new BasicDBObject("$in", yourList));
DBCursor cursor = collection.find(yourInQuery);

请在以下链接中了解更多相关信息,

答案 1 :(得分:2)

String joined = s.stream()
    .map(plain -> '"' + StringEscapeUtils.escapeJava(plain) + '"')
    .collect(Collectors.joining(", "));

我们的想法是首先将每个字符串转换为正确引用的表示形式,然后加入它们。

您必须自己决定使用哪种转义功能。如果您要生成CSV文件,则应该使用一些CsvWriter类。

答案 2 :(得分:1)

只需使用join

文档示例:

 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\"");

replaceAll接受一个正则表达式,它捕获所有不是“,”(您的分隔符),并用双引号括起来。

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

答案 3 :(得分:0)

结合前两个答案:

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(", "));

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