Java-String []内の文字列を連結するための組み込み関数はありますか?

StackOverflow https://stackoverflow.com/questions/1810954

  •  06-07-2019
  •  | 
  •  

質問

またはこれよりも良い方法ですか?

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のコレクションを好んでいます。特に完全に汎用的だからです。グーグルの人々はまた、本番環境で使用するのに十分な速さであると主張していますが、これはかなり印象的です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top