Java:将 List<String> 转换为 join()d 字符串

新手上路,请多包涵

JavaScript有 Array.join()

 js>["Bill","Bob","Steve"].join(" and ")
Bill and Bob and Steve

Java有这样的东西吗?我知道我可以自己用 StringBuilder 拼凑一些东西:

 static public String join(List<String> list, String conjunction)
{
   StringBuilder sb = new StringBuilder();
   boolean first = true;
   for (String item : list)
   {
      if (first)
         first = false;
      else
         sb.append(conjunction);
      sb.append(item);
   }
   return sb.toString();
}

..但是如果类似的东西已经是JDK的一部分,那么这样做是没有意义的。

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

阅读 983
2 个回答

String.join

使用 Java 8,您无需任何第三方库即可做到这一点。

如果要加入字符串集合,可以使用 String.join () 方法:

 List<String> list = Arrays.asList("foo", "bar", "baz");
String joined = String.join(" and ", list); // "foo and bar and baz"

Collectors.joining

如果您的 Collection 类型不是 String ,则可以将 Stream API 与 加入 Collector 一起使用:

 List<Person> list = Arrays.asList(
  new Person("John", "Smith"),
  new Person("Anna", "Martinez"),
  new Person("Paul", "Watson ")
);

String joinedFirstNames = list.stream()
  .map(Person::getFirstName)
  .collect(Collectors.joining(", ")); // "John, Anna, Paul"

StringJoiner 类也可能有用。

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

所有对 Apache Commons 的引用都很好(这是大多数人使用的),但我认为 Guava 的等效 项 Joiner 具有更好的 API。

你可以做简单的连接案例

Joiner.on(" and ").join(names)

但也很容易处理空值:

 Joiner.on(" and ").skipNulls().join(names);

要么

Joiner.on(" and ").useForNull("[unknown]").join(names);

和(就我而言,它比 commons-lang 更有用)处理地图的能力:

 Map<String, Integer> ages = .....;
String foo = Joiner.on(", ").withKeyValueSeparator(" is ").join(ages);
// Outputs:
// Bill is 25, Joe is 30, Betty is 35

这对于调试等非常有用。

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

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