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

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 (" " ;, strings) . Было обнаружено, что «85%» из использования для получения индекса в цикле posh 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);
}

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

Другие советы

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

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

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

У Александра Стенсби есть исследование из четырех частей Guava / Collections.

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

org.apache.commons.lang.StringUtils.join

Вторая рекомендация - взглянуть на Google Guava.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top