假设我有一个字符串列表。
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实用程序?
如何通过实用程序实现此目的,而不是编写自己的逻辑来做同样的事情?
答案 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"
使用$ 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。