Java - есть ли встроенная функция для объединения строк в строку []?
Вопрос
Или лучше, чем этот?
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 также утверждают, что он достаточно быстрый, чтобы их можно было использовать в производстве, что довольно впечатляюще, хотя я не могу это проверить лично.