Java - есть ли встроенная функция для объединения строк в строку []? - PullRequest
1 голос
/ 28 ноября 2009

Или лучше, чем этот?

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

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

  return out.toString();
}

Не беспокойтесь, если нет, я просто чувствую, что должен быть встроенный?

Ответы [ 4 ]

6 голосов
/ 28 ноября 2009

Нет, не в текущей библиотеке Java.

В JDK7 вы должны быть в состоянии написать String.join("", strings). Было обнаружено, что «85%» использований для получения индекса в шикарном цикле for заключалось в соединении строк (что вы можете обойтись в любом случае).

Полагаю, если вы хотите быть очень эффективным, вы можете написать это примерно так:

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);
}

(Конечно, не скомпилировано и не протестировано.)

5 голосов
/ 28 ноября 2009

Взгляните на новые библиотеки Google Guava , которые будут включать Google Collections после перехода с 1.0RC4 на 1.0. Guava и коллекции дают вам немного силы и элегантности и уже широко используются в производственном коде Google.

Класс Joiner идеально подходит для вашего примера:

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

У Александра Стенсби есть хорошее исследование из четырех частей Гуавы / Коллекций.

Как и Apache Collections, он не является частью JDK, хотя он очень тщательно собирается поверх java.util.collection.

2 голосов
/ 28 ноября 2009
org.apache.commons.lang.StringUtils.join
0 голосов
/ 08 января 2010

Вторая рекомендация, чтобы посмотреть на Google Guava.

Коллекции Google были выпущены на прошлой неделе, а на этой неделе Guava был выпущен для тестирования. В Google Collections все хорошо, и API не изменится. Я предпочитаю Google Collections, а не Apache, особенно потому, что она полностью универсальная. Люди из Google также утверждают, что он достаточно быстрый, чтобы их можно было использовать в производстве, что довольно впечатляет, хотя я не могу это проверить лично.

...