Java - 将引号附加到数组中的字符串并将字符串连接到数组中

新手上路,请多包涵

我想将双引号附加到数组中的字符串,然后将它们作为单个字符串连接(保留引号)。有没有这样做的字符串库?我已经尝试过 Apache commons StringUtils.join 和 Google guava 中的 Joiner 类,但找不到任何附加双引号的内容。

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

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

所需的输出应如下所述:

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

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

原文由 Anand 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 933
2 个回答

使用 Java 8+

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

使用 StreamCollector

朴素但有效的方法

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();
}

注意事项

  • 所有解决方案都假定 stringsList<String> 而不是 String[] 。您可以使用 --- 将 String[] 转换为 List<String> Arrays.asList(strings) 。您可以使用 Stream<String> 直接从 String[] 获得 Arrays.stream(strings)
  • Java 8+ 片段使用 + 串联,因为此时 + 通常比 StringBuilder 表现更好。
  • 旧版本的片段使用 StringBuilder 而不是 + 因为它在旧版本上通常更快。

原文由 Olivier Grégoire 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

原文由 Sifeng 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题