JavaScript имеет Array.join()
js>["Bill","Bob","Steve"].join(" and ")
Bill and Bob and Steve
У Java есть что-нибудь подобное? Я знаю, что могу что-то сделать самостоятельно с помощью StringBuilder:
static public String join(List<String> list, String conjunction)
{
StringBuilder sb = new StringBuilder();
boolean first = true;
for (String item : list)
{
if (first)
first = false;
else
sb.append(conjunction);
sb.append(item);
}
return sb.toString();
}
... но нет смысла делать это, если что-то подобное уже является частью JDK.
String.join()
метод. Посмотрите на этот ответ, если вы используете Java 8 (или новее) stackoverflow.com/a/22577565/1115554Ответы:
С Java 8 вы можете сделать это без какой-либо сторонней библиотеки.
Если вы хотите присоединиться к коллекции строк, вы можете использовать новый метод String.join () :
Если у вас есть Collection с типом, отличным от String, вы можете использовать Stream API с присоединяющимся Collector :
StringJoiner
Класс также может быть полезным.источник
assertThat(String.join(", ", Lists.newArrayList("1", null)), is("1, null"));
[a, b, c]
включения скобок.Iterable<CharSequence>
; Отношения интерфейса:Iterable -> Collection -> List
Все ссылки на Apache Commons в порядке (и это то, что большинство людей используют), но я думаю, что эквивалент Guava , Joiner , имеет гораздо более приятный API.
Вы можете сделать простой случай соединения с
но также легко справиться с нулями:
или
и (достаточно полезно, насколько я понимаю, чтобы использовать его вместо commons-lang), возможность работать с Картами:
что чрезвычайно полезно для отладки и т. д.
источник
.useForLastSeparator()
или какой-нибудь подобный метод? Таким образом, вы можете получить что-то вроде ", и" только между двумя последними элементами (с "," для остальных).separator
(что естьfinal
). Все, что я видел в Гуаве, где я использовал эквивалент Apache Commons, было намного лучше (читай: чище, быстрее, безопаснее и просто более надежно в целом) в Гуаве с меньшим количеством сбоев в крайних случаях и проблемами безопасности потоков и меньший объем памяти. Похоже, что их руководящий принцип «наилучшим образом» пока остается в силе.String.join()
метод иStringJoiner
класс.Не из коробки, но во многих библиотеках есть похожие:
Commons Lang:
Весна:
источник
На Android вы можете использовать класс TextUtils .
источник
String.join
требует минимального уровня API 26 на Android.Нет, в стандартном Java API такого удобного метода нет.
Неудивительно, что Apache Commons предоставляет такую возможность в своем классе StringUtils на тот случай, если вы не хотите писать это самостоятельно.
источник
isEmpty()
метод вместо (статического)join()
метода вString
...: rollseyes: :)Три возможности в Java 8:
источник
С помощью сборщика Java 8 это можно сделать с помощью следующего кода:
Также самое простое решение в java 8:
или
источник
Я написал это (я использую его для bean-компонентов и эксплойтов
toString
, поэтому не пишитеCollection<String>
):но
Collection
не поддерживается JSP, поэтому для TLD я написал:и положить в
.tld
файл:и использовать его в файлах JSP как:
источник
Collection<>
наIterable<>
?Код, который вы имеете, является правильным способом сделать это, если вы хотите использовать JDK без каких-либо внешних библиотек. Нет простого «однострочного», который вы могли бы использовать в JDK.
Если вы можете использовать внешние библиотеки , я рекомендую вам заглянуть в класс org.apache.commons.lang.StringUtils в библиотеке Apache Commons.
Пример использования:
источник
Ортодоксальный способ достичь этого - определить новую функцию:
Образец:
Вывод:
источник
separator
было бы намного более наводящим на размышления.Java 8 решение с
java.util.StringJoiner
У Java 8 есть
StringJoiner
класс. Но вам все еще нужно написать небольшой пример, потому что это Java.источник
Вы можете использовать библиотеку apache commons, которая имеет класс StringUtils и метод join.
Проверьте эту ссылку: https://commons.apache.org/proper/commons-lang/javadocs/api.2.0/org/apache/commons/lang/StringUtils.html
Обратите внимание, что приведенная выше ссылка может со временем устареть, и в этом случае вы можете просто выполнить поиск в сети «apache commons StringUtils», что должно позволить вам найти последнюю ссылку.
(ссылка из этого потока) Java-эквиваленты C # String.Format () и String.Join ()
источник
Ты можешь сделать это:
Или однострочник (только когда вы не хотите '[' и ']')
Надеюсь это поможет.
источник
Интересный способ сделать это с чистым JDK, в одной обязанности:
Вывод:
Не слишком идеальный и не слишком веселый способ!
Вывод:
источник
Возможно, вы захотите попробовать метод соединения Apache Commons StringUtils:
http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html#join(java.util.Iterator , java.lang.String)
Я обнаружил, что Apache StringUtils обнаруживает слабость jdk ;-)
источник
Если вы используете Eclipse Collections (ранее GS Collections ), вы можете использовать этот
makeString()
метод.Если вы можете преобразовать свой
List
тип коллекций Eclipse, то вы можете избавиться от адаптера.Если вам нужна строка, разделенная запятыми, вы можете использовать версию,
makeString()
которая не принимает параметров.Примечание: я являюсь коммиттером для Eclipse Collections.
источник
С потоком Java 1.8 можно использовать,
источник
РЕДАКТИРОВАТЬ
Я также замечаю
toString()
основную проблему реализации и об элементе, содержащем разделитель, но я думал, что был параноиком.Поскольку у меня есть два комментария на этот счет, я изменяю свой ответ на:
Который выглядит довольно похоже на оригинальный вопрос.
Так что, если вы не хотите добавлять банку в свой проект, вы можете использовать это.
Я думаю, что нет ничего плохого в вашем исходном коде. На самом деле, альтернатива, которую предлагают все, выглядит почти одинаково (хотя она и делает несколько дополнительных проверок)
Вот оно, вместе с лицензией Apache 2.0.
Теперь мы знаем, спасибо с открытым исходным кодом
источник
", "
?Google Guava API также имеет .join (), хотя (как должно быть очевидно из других ответов), Apache Commons здесь в значительной степени стандарт.
источник
Java 8 действительно приносит
метод, который является нулевым, используя
prefix + suffix
нулевые значения.Его можно использовать следующим образом:
Collectors.joining(CharSequence delimiter)
Метод просто вызываетjoining(delimiter, "", "")
внутренне.источник
Вы можете использовать это из StringUtils Spring Framework. Я знаю, что это уже упоминалось, но вы можете просто взять этот код, и он работает немедленно, без необходимости использования Spring.
источник
Попробуй это:
источник