将 Set<String> 的内容放入单个字符串中,并用空格分隔单词的最快方法?

2022-08-31 11:56:05

我有几个s,并希望将这些中的每一个转换为一个单一的,其中原始的每个元素都由空格“ ”分隔。一个天真的第一种方法是这样做Set<String>StringSet

Set<String> set_1;
Set<String> set_2;

StringBuilder builder = new StringBuilder();
for (String str : set_1) {
  builder.append(str).append(" ");
}

this.string_1 = builder.toString();

builder = new StringBuilder();
for (String str : set_2) {
  builder.append(str).append(" ");
}

this.string_2 = builder.toString();

有谁能想到一种更快,更漂亮或更有效的方法来做到这一点?


答案 1

使用 commons/lang,你可以使用 StringUtils.join 来做到这一点:

String str_1 = StringUtils.join(set_1, " ");

为了简洁起见,你不能真正打败它。

更新:

重新阅读这个答案,我更喜欢现在关于番石榴的Joiner的另一个答案。事实上,这些天我不去apache commons附近。

另一个更新:

Java 8 引入了 String.join() 方法

String joined = String.join(",", set);

虽然这不像番石榴版本那样灵活,但当你的类路径上没有番石榴库时,它很方便。


答案 2

如果您使用的是 Java 8,则可以使用本机

String.join(CharSequence delimiter, Iterable<? extends CharSequence> elements)

方法:

返回由元素副本与指定分隔符的副本连接在一起的新元素。例如:StringCharSequence

 Set<String> strings = new LinkedHashSet<>();
 strings.add("Java"); strings.add("is");
 strings.add("very"); strings.add("cool");
 String message = String.join("-", strings);
 //message returned is: "Java-is-very-cool"

设置实现,所以只需使用:Iterable

String.join(" ", set_1);