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的一部分,那么这样做就没有意义了。


当前回答

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

如果你有一个非String类型的Collection,你可以使用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类可能也很有用。

其他回答

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

如果你有一个非String类型的Collection,你可以使用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类可能也很有用。

你可能想试试Apache Commons StringUtils join方法:

以http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html加入(java.util.Iterator)

我发现Apache StringUtils捡起jdk的懈怠;-)

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

你可以使用简单的连接

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

但也很容易处理空值:

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

or

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

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

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

这对于调试等非常有用。

谷歌的Guava API也有.join(),尽管(从其他回复中应该很明显),Apache Commons在这里几乎是标准的。

Java 8中有三种可能性:

List<String> list = Arrays.asList("Alice", "Bob", "Charlie")

String result = String.join(" and ", list);

result = list.stream().collect(Collectors.joining(" and "));

result = list.stream().reduce((t, u) -> t + " and " + u).orElse("");