1

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

String concat(String[] strings) {
  StringBuilder out = new StringBuilder();

  for(String next: strings) {
    out.append(next);
  }

  return out.toString();
}

いいえ、心配はいりません。ビルトインがあるべきだと思いますか?

4

4 に答える 4

6

いいえ、現在の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);
}

(もちろん、コンパイルもテストもされていません。)

于 2009-11-27T23:19:13.397 に答える
5

新しい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の上に非常に注意深く構築されています。

于 2009-11-28T05:05:16.467 に答える
2
org.apache.commons.lang.StringUtils.join
于 2009-11-27T23:18:44.507 に答える
0

GoogleGuavaを確認するための2番目の推奨事項。

Googleコレクションは先週リリースされ、今週はGuavaがテスト用にリリースされました。Googleコレクションのものはしっかりしていて、APIは変更されません。特に完全に汎用的であるため、私はapacheコレクションよりもGoogleコレクションの方がはるかに好きです。グーグルの人々はまた、彼らが本番環境で使用するのに十分速いと主張しています。これはかなり印象的ですが、私はそれを個人的に確認することはできません。

于 2010-01-08T05:33:01.100 に答える