这非常简单,但我见过很多变种,我在其他地方看不到自己的做法。给出:
Iterable<String> strings;
创建一个包含所有字符串的字符串,以逗号分隔。
答案 0 :(得分:7)
使用Java 8,幸运的是,最终有一种标准方法可以做到这一点:
String string = StreamSupport.stream(strings.spliterator(), false)
.collect(Collectors.joining(", "));
不幸的是,从Iterable
to a Stream
(yet)
使用
org.apache.commons.lang.StringUtils.join(Iterator iterator, String separator)
这
http://commons.apache.org/lang/
如果你想自己做,我有时会这样做
StringBuilder sb = new StringBuilder();
String separator = "";
for (String string : iterable) {
sb.append(separator);
sb.append(string);
separator = ", ";
}
答案 1 :(得分:5)
final StringBuilder sb = new StringBuilder();
final Iterator<String> it = iterable.iterator();
if(it.hasNext()){
sb.append(it.next());
while(it.hasNext()){
sb.append(',').append(it.next());
}
}
return sb.toString();
但当然我总是喜欢使用Guava的版本
String joined = Joiner.on(',').join(iterable);
(公平地说:我之前曾问过a very similar question)
答案 2 :(得分:1)
这是我在大多数项目中包含的连接函数:
public static String join(Iterable<? extends Object> iterable, String delimiter) {
return join(iterable, delimiter, "", "");
}
public static String join(Iterable<? extends Object> iterable, String delimiter,
String prepend, String append) {
StringBuilder buffer = new StringBuilder();
Iterator<?> iterator = iterable.iterator();
boolean hasNext = iterator.hasNext();
while (hasNext) {
buffer.append(prepend);
buffer.append(String.valueOf(iterator.next()));
buffer.append(append);
if (iterator.hasNext()) {
buffer.append(delimiter);
} else {
hasNext = false;
}
}
return buffer.toString();
}
一些例子:
String[] list = { "hello", "mellow", "jello" };
Util.join(list, ","); // "hello,mellow,jello"
Util.join(list, ", and "); // "hello, and mellow, and jello"
Util.join(list, "&", "x=", "1"); // "x=hello1&x=mellow1&x=jello1"
Util.join(list, " OR ", "(Title:", ")"); // "(Title:hello) OR (Title:mellow) OR (Title:jello)"
答案 3 :(得分:1)
只是为了好玩,一个递归的实现:
public static void main(String[] args) {
System.out.println(buildCsv(Arrays.asList(new String[] {"one", "two", "three"}).iterator()));
}
private static String buildCsv(Iterator<String> iterator) {
return iterator.hasNext() ? iterator.next() + (iterator.hasNext() ? "," : "") + buildCsv(iterator) : "";
}
答案 4 :(得分:1)
如果您使用 Java 8 或更高版本,则可以使用String.join
。
Iterable<String> strings = Arrays.asList("a", "b", "c");
String result = String.join(",", strings);
Assert.assertEquals("a,b,c", result);
如果您使用Eclipse Collections,则可以使用适用于任何Iterable
的{{3}}实用程序类。
Iterable<String> strings = Arrays.asList("a", "b", "c");
String result = Iterate.makeString(strings, ",");
Assert.assertEquals("a,b,c", result);
Eclipse Collections 7.x适用于 Java 5 或更高版本。 Eclipse Collections 8.x-9.x适用于 Java 8 或更高版本。
注意:我是Eclipse Collections的提交者。