Java-String []内の文字列を連結するための組み込み関数はありますか?
質問
またはこれよりも良い方法ですか?
String concat(String[] strings) {
StringBuilder out = new StringBuilder();
for(String next: strings) {
out.append(next);
}
return out.toString();
}
いいえ、心配はありません。組み込みが必要だと思いますか?
解決
いいえ、現在のJavaライブラリにはありません。
JDK7では、 String.join("&quot ;,文字列)
を記述できるはずです。 " 85%" posh forループでインデックスが必要な用途の1つは、文字列結合を行うことでした(とにかくなくても可能です)。
非常に効率的になりたい場合は、次のように書くことができます:
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);
}
(もちろんコンパイルもテストもされていません。)
他のヒント
新しい Google Guavaライブラリをご覧ください。これには、 Googleコレクションが1.0RC4から1.0に渡されたら。グアバとコレクションは、あなたにかなりの力と優雅さを与えてくれ、すでにGoogleのプロダクションコードで広く使われています。
ジョイナークラスはあなたの例に完全に適合します:
String[] strings = { "Stack", "Overflow", ".com" };
String site = Joiner.on("").join(strings);
Aleksander Stensbyには、Guava / Collectionsの 4部探索があります。
Apacheコレクションのように、JDKの一部ではありませんが、java.util.collectionの上に非常に慎重に構築されます。
org.apache.commons.lang.StringUtils.join
Google Guavaを見るための2番目の推奨事項。
Google Collectionsは先週リリースされ、今週、Guavaはテスト用にリリースされました。 Googleコレクションは堅実であり、APIは変更されません。私は、ApacheのコレクションよりもGoogleのコレクションを好んでいます。特に完全に汎用的だからです。グーグルの人々はまた、本番環境で使用するのに十分な速さであると主張していますが、これはかなり印象的です。