またはこれよりも良い方法ですか?
String concat(String[] strings) {
StringBuilder out = new StringBuilder();
for(String next: strings) {
out.append(next);
}
return out.toString();
}
いいえ、心配はいりません。ビルトインがあるべきだと思いますか?
いいえ、現在のJavaライブラリにはありません。
JDK7では、を書くことができるはずですString.join("", strings)
。posh forループでインデックスが必要な場合の「85%」は、文字列結合を実行することであることがわかりました(とにかく実行できます)。
あなたが超効率的になりたいのなら、あなたはそれを次のように書くことができると思います:
public static String concat(String... strs) {
int size = 0;
for (String str : strs) {
size += str.length;
}
final char[] cs = new char[size];
int off = 0;
try {
for (String str : strs) {
int len = str.length();
str.getChars(0, len, cs, off);
off += len;
}
} catch (ArrayIndexOutOfBoundsException exc) {
throw new ConcurrentModificationException(exc);
}
if (off != cs.length) {
throw new ConcurrentModificationException();
}
return new String(cs);
}
(もちろん、コンパイルもテストもされていません。)
新しいGoogleGuavaライブラリをご覧ください。1.0RC4から1.0に移行すると、Googleコレクションが組み込まれます。GuavaとCollectionsは、かなりのパワーとエレガンスを提供し、Googleのプロダクションコードですでに広く使用されています。
ジョイナークラスはあなたの例に完全に適合します:
String[] strings = { "Stack", "Overflow", ".com" };
String site = Joiner.on("").join(strings);
Aleksander Stensbyは、Guava/Collectionsの4つのパートからなる素晴らしい探索を行っています。
Apache Collectionsと同様に、これはJDKの一部ではありませんが、java.util.collectionの上に非常に注意深く構築されています。
org.apache.commons.lang.StringUtils.join
GoogleGuavaを確認するための2番目の推奨事項。
Googleコレクションは先週リリースされ、今週はGuavaがテスト用にリリースされました。Googleコレクションのものはしっかりしていて、APIは変更されません。特に完全に汎用的であるため、私はapacheコレクションよりもGoogleコレクションの方がはるかに好きです。グーグルの人々はまた、彼らが本番環境で使用するのに十分速いと主張しています。これはかなり印象的ですが、私はそれを個人的に確認することはできません。