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). 发现在豪华 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

看看新的Google Guava 库,一旦它从 1.0RC4 升级到 1.0 ,它将包含Google Collections 。Guava 和 Collections 为您提供了相当多的功能和优雅,并且已经在 Google 生产代码中广泛使用。

Joiner类非常适合您的示例:

String[] strings = { "Stack", "Overflow", ".com" };
String site = Joiner.on("").join(strings);

Aleksander Stensby 对 Guava/Collections 进行了很好的四部分探索

与 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

第二个建议看谷歌番石榴。

Google Collections 于上周发布,本周 Guava 已发布进行测试。Google Collections 的东西是可靠的,API 不会改变。我更喜欢 Google Collections 而不是 apache,特别是因为它完全通用。谷歌的人还声称它的速度足以让他们在生产中使用,这相当令人印象深刻,尽管我无法亲自验证这一点。

于 2010-01-08T05:33:01.100 回答