Для удобства людей, ищущих этот ответ, вероятно, следует отметить, что это также эквивалент Perl-соединения.
К-ден,
3
он говорит, что это не определено для меня
Ninjaxor
@Ninjaxor 1. commons-lang * jar должен находиться в пути к классам 2. import org.apache.commons.lang3.StringUtils;
Петер - Восстановить Монику
9
Я бы порекомендовал вам отредактировать этот ответ, чтобы добавить ссылку на новый String.join()метод, введенный в Java 8. Таким образом, огромное количество людей, читающих этот принятый ответ, получат пользу от этих знаний. В настоящее время ответ, получивший наибольшее количество голосов с упоминанием этого факта, скорее всего потерян ниже ...
Дункан Джонс
1
Стоит отметить , что String.join()будет работать только List<CharSequence>или CharSequence[]элементы.
Это, безусловно, лучший ответ для всех версий Android, так как Java 8 выйдет на Android чуть позже. В этом решении используются встроенные библиотеки Android, а не эти глупые решения «включить огромную библиотеку для выполнения одного действия».
LukeStoneHm
Это сентябрь 2017 года, Java 8 для Android еще далеко. Спасибо за этот ответ!
Aenadon
57
В Java 8 вы можете использовать
1) Stream API:
String[] a =newString[]{"a","b","c"};String result =Arrays.stream(a).collect(Collectors.joining(", "));
Вы можете легко написать такую функцию примерно в десяти строках кода:
String combine(String[] s,String glue){int k = s.length;if( k ==0){returnnull;}StringBuilderout=newStringBuilder();out.append( s[0]);for(int x=1; x < k;++x ){out.append(glue).append(s[x]);}returnout.toString();}
Хорошая практика, по вашему мнению, не существует универсального стандарта для таких вещей.
Феб
24
Но если бы я включил фигурные скобки, это добавило бы еще две строки кода, и я бы не сказал, что сделал это в 11 строк!
Джей
8
проблема в том, что вы через какое-то время или кто-то другой спешите добавить к этому еще одну строку if / for без добавления скобок; или удалите return null после if (k == 0), который в некоторых случаях будет компилироваться, но будет некорректным. Тогда лучше пожертвовать одну дополнительную строку для этой закрывающей скобки (открытие может остаться в той же самой строке if / for).
Милан
16
Я думаю, это потрясающе, что, хотя большинство языков упаковывают такую функциональность в свое ядро, сообщество Java призывает всех изобретать велосипед.
Джон Стриклер
33
11 строк? Ба! Я могу сделать это в 1! Просто удалите все символы новой строки в исходном файле.
Библиотека Google Guava также имеет такую возможность . Вы можете увидеть пример String [] также из API.
Как уже описано в API, остерегайтесь неизменности методов компоновщика.
Он может принимать массив объектов, поэтому он будет работать в вашем случае. В моем предыдущем опыте я попытался присоединиться к стеку, который является итеративным, и он отлично работает.
Используйте StringBuilder (не ориентированный на поток) вместо StringBuffer (ориентированный на поток) для лучшей производительности. Интерфейс такой же.
Асаф
2
Это, кажется, от snippets.dzone.com/posts/show/91 . Комментарии предлагают значительно улучшенную версию: публичное статическое соединение строк (Iterable <? Extends Object> pColl, разделитель строк) {Iterator <? расширяет объект> oIter; if (pColl == null || (! (oIter = pColl.iterator ()) .hasNext ())) return ""; StringBuilder oBuilder = new StringBuilder (String.valueOf (oIter.next ())); while (oIter.hasNext ()) oBuilder.append (разделитель) .append (oIter.next ()); return oBuilder.toString (); }
Quantum7
6
Если вы оказались здесь в поисках быстрого преобразования массива в строку, попробуйте Arrays.toString () .
Создает строковое представление Object[]переданного. Результат "[]"заключен в скобки ( ), каждый элемент преобразуется в строку через String.valueOf(Object)и разделяется ", ". Если массив есть
null, то "null"возвращается.
ОГРОМНОЕ СПАСИБО! Строки разделены символом «,», и вокруг всего этого есть «[]», что меня устраивает.
Джон Хенкель
5
Просто для задания «У меня самый короткий» , вот мины;)
Повторяющийся:
publicstaticString join(String s,Object... a){StringBuilder o =newStringBuilder();for(Iterator<Object> i =Arrays.asList(a).iterator(); i.hasNext();)
o.append(i.next()).append(i.hasNext()? s :"");return o.toString();}
Вам нравится мой трехстрочный способ, использующий только методы класса String?
staticStringjoin(String glue,String[] array){String line ="";for(String s : array) line += s + glue;return(array.length ==0)? line : line.substring(0, line.length()- glue.length());}
Если вы используете функциональную библиотеку Java и по какой-то причине не можете использовать потоки из Java 8 (что может иметь место при использовании плагина Android + Retrolambda), вот функциональное решение для вас:
Ответы:
Начиная с Java8 можно использовать
String.join()
.Формирует:
В противном случае, Apache Commons Lang имеет
StringUtils
класс, который имеетjoin
функцию, которая объединяет массивы для созданияString
.Например:
Создает следующее
String
:источник
String.join()
метод, введенный в Java 8. Таким образом, огромное количество людей, читающих этот принятый ответ, получат пользу от этих знаний. В настоящее время ответ, получивший наибольшее количество голосов с упоминанием этого факта, скорее всего потерян ниже ...String.join()
будет работать толькоList<CharSequence>
илиCharSequence[]
элементы.Если вы искали, что использовать в Android, это:
например:
источник
В Java 8 вы можете использовать
1) Stream API:
2) новый метод String.join: https://stackoverflow.com/a/21756398/466677
3) класс java.util.StringJoiner: http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html
источник
Вы можете легко написать такую функцию примерно в десяти строках кода:
источник
Небольшой мод вместо использования substring ():
источник
.append()
два раза для каждогоString
вместо того, чтобы объединить их, а затем добавить к сборщику.Как и многие вопросы в последнее время, Java 8 на помощь:
Java 8 добавил новый статический метод,
java.lang.String
который делает именно то, что вы хотите:Используй это:
Результаты в:
источник
Библиотека Google Guava также имеет такую возможность . Вы можете увидеть пример String [] также из API.
Как уже описано в API, остерегайтесь неизменности методов компоновщика.
Он может принимать массив объектов, поэтому он будет работать в вашем случае. В моем предыдущем опыте я попытался присоединиться к стеку, который является итеративным, и он отлично работает.
Образец от меня:
распечатывает:
|i am a coder|
источник
Дано:
Тогда в качестве альтернативы ответу coobird, где клей ",":
Или объединить с другой строкой, такой как "& amp;".
Однако ... это ТОЛЬКО работает, если вы знаете, что значения в массиве или списке НЕ содержат символьную строку ",".
источник
Arrays.asList(a).toString()
работал для того, что я хотел сделатьЕсли вы используете Spring Framework, то у вас есть класс StringUtils :
источник
Не по сути, нет. Поиск «склеивания строк присоединения к массиву Java» даст вам некоторые фрагменты кода о том, как этого добиться.
например
источник
Если вы оказались здесь в поисках быстрого преобразования массива в строку, попробуйте Arrays.toString () .
источник
Просто для задания «У меня самый короткий» , вот мины;)
Повторяющийся:
рекурсивные:
источник
copyOfRange()
").Ничего встроенного, что я знаю.
Apache Commons Lang имеет класс с именем,
StringUtils
который содержит много функций соединения.источник
Вот как я это делаю.
источник
Аналогичная альтернатива
источник
Мой спин
источник
Вам нравится мой трехстрочный способ, использующий только методы класса String?
источник
StringBuilder
если вам нужна эффективность: PЧтобы получить "str1, str2" из "str1", "str2", "":
Также вы можете добавить дополнительную нулевую проверку
источник
Если вы используете функциональную библиотеку Java и по какой-то причине не можете использовать потоки из Java 8 (что может иметь место при использовании плагина Android + Retrolambda), вот функциональное решение для вас:
Обратите внимание, что это не самый эффективный подход, но он хорошо работает для небольших списков.
источник
Я делаю это таким образом, используя StringBuilder:
источник
s + delimiter
(конкатенация строк с оператором "плюс") отрицает всю цель использованияStringBuilder
.источник
В java.util.Arrays есть метод asList. Вместе с API java.util.List / ArrayList это дает вам все необходимое :;
источник