Java - 将引号附加到数组中的字符串,并连接数组中的字符串使用 Java 8+使用旧版本的 Java

2022-08-31 20:03:25

我想将双引号附加到数组中的字符串,然后将它们作为单个字符串连接(保留引号)。是否有任何字符串库可以执行此操作?我尝试过Apache commons StringUtils.join和Google番石榴中的Joiner类,但找不到任何附加双引号的东西。

我的输入将是一个数组,如下所述:

String [] listOfStrings = {"day", "campaign", "imps", "conversions"};

所需的输出应如下所述:

String output = "\"day\", \"campaign\", \"imps\", \"conversions\"";

我知道我可以遍历数组并附加引号。但是,如果有更干净的解决方案,我想要一个更干净的解决方案。


答案 1

使用 Java 8+

Java 8 具有 Collectors.joining() 及其重载。它还具有String.join

使用 a 和 aStreamCollector

天真但有效的方法

String wrapWithQuotesAndJoin(List<String> strings) {
  return strings.stream()
    .map(s -> "\"" + s + "\"")
    .collect(Collectors.joining(", "));
}

最短,可能表现更好(虽然有点黑客)

String wrapWithQuotesAndJoin(List<String> strings) {
  return strings.stream()
    .collect(Collectors.joining("\", \"", "\"", "\""));
}

String.join

非常黑客。不要使用。(但必须提到)

String wrapWithQuotesAndJoin(List<String> strings) {
  return strings.isEmpty() ? "" : "\"" + String.join("\", \"", strings) + "\""
}

使用旧版本的 Java

帮自己一个忙,使用图书馆。番石榴立即浮现在脑海中。

使用番石榴

private static final Function<String,String> addQuotes = new Function<String,String>() {
  @Override public String apply(String s) {
    return new StringBuilder(s.length()+2).append('"').append(s).append('"').toString();
  }
};
String wrapWithQuotesAndJoin(List<String> strings) {     
    return Joiner.on(", ").join(Iterables.transform(listOfStrings, addQuotes));
}

无库

String wrapWithQuotesAndJoin(List<String> strings) {
  if (listOfStrings.isEmpty()) {
    return "";
  }
  StringBuilder sb = new StringBuilder();
  Iterator<String> it = listOfStrings.iterator();
  sb.append('"').append(it.next()).append('"'); // Not empty
  while (it.hasNext()) {
    sb.append(", \"").append(it.next()).append('"');
  }
  result = sb.toString();
}

备注

  • 所有解决方案都假定这是 一个 而不是 一个 .您可以将 a 转换为 using .您可以直接从 using .stringsList<String>String[]String[]List<String>Arrays.asList(strings)Stream<String>String[]Arrays.stream(strings)
  • Java 8+ 代码段使用串联,因为此时的性能通常比 .++StringBuilder
  • 旧版本的代码段使用,而不是因为在旧版本上通常更快。StringBuilder+

答案 2
String output = "\"" + StringUtils.join(listOfStrings , "\",\"") + "\"";

推荐