Есть ли какой-либо встроенный метод в Java, который позволяет нам преобразовывать разделенную запятыми строку в некоторый контейнер (например, массив, список или вектор)? Или мне нужно написать собственный код для этого?
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = //method that converts above string into list??
java
string
collections
split
Джейм
источник
источник
Ответы:
Преобразовать строку через запятую в список
Приведенный выше код разбивает строку на разделитель, определенный как:,
zero or more whitespace, a literal comma, zero or more whitespace
который поместит слова в список и сведет все пробелы между словами и запятыми.Обратите внимание, что это возвращает просто оболочку для массива: вы НЕ МОЖЕТЕ, например, получить
.remove()
результатList
. Для фактическогоArrayList
вы должны в дальнейшем использоватьnew ArrayList<String>
.источник
\s
соответствует любому пробелу,*
применяется совпадение ноль или более раз. Так\s*
значит «совпадать с любым пробелом ноль или более раз». Мы ищем это до и после запятой. Следовательно, разбиение будет работать для таких строк, как"item1 , item2 , item3"
, или"item1,item2 ,item3"
, и т. Д. В Java вам нужно избежать обратной косой черты в строках, так что вы получите\\s*
"[\\s,]+"
для обрезки пробелов для значений. Например," item1 , item2 , item3 , "
становится["item1", "item2", "item3"]
."[\\s,]+"
также разделит внутреннее пространство внутри токена, разделенного запятыми, он будет рассматривать оба пробела как разделитель, даже если запятая отсутствует, вместо запятой плюс любое количество окружающих пробелов."\\s*(,\\s*)+"
будет обрезать пробелы только вокруг разделенных запятыми токенов, а также игнорировать любые строки, которые являются только пробелами или пустыми.Arrays.asList
возвращает фиксированный размер,List
поддерживаемый массивом. Если вы хотите нормальную мутабельность,java.util.ArrayList
вам нужно сделать это:Или, используя Гуава :
Использование a
Splitter
дает вам больше гибкости в том, как вы разделяете строку, и дает вам возможность, например, пропускать пустые строки в результатах и обрезать результаты. У него также менее странное поведение, чем то,String.split
что вам не нужно разделять по регулярным выражениям (это только один из вариантов).источник
Arrays.asList
предоставляет обертку вокруг собственного массива (избегая копирования элемента), онnew ArrayList(...)
будет точно выполнять такой элемент путем копирования элемента. Вероятно, нам следует предпочесть подход, позволяющий напрямую анализировать элементы в желаемой целевой коллекции.Два шага:
String [] items = commaSeparated.split("\\s*,\\s*");
List<String> container = Arrays.asList(items);
источник
split
интерпретируется как RegEx.Вот еще один для преобразования CSV в ArrayList:
Печатает вас
источник
Если
List
конечная цель, как указано в ОП, является конечной целью, то уже принятый ответ остается самым коротким и лучшим. Однако я хочу предоставить альтернативы, использующие потоки Java 8 , которые дадут вам больше преимуществ, если они будут частью конвейера для дальнейшей обработки.Оборачивая результат функции .split (собственный массив) в поток, а затем преобразуя его в список.
Если важно, чтобы результат сохранялся в
ArrayList
соответствии с заголовком из OP, вы можете использовать другойCollector
метод:Или с помощью API синтаксического анализа RegEx:
Обратите внимание, что вы все равно можете оставить
list
тип переменнойList<String>
вместоArrayList<String>
. Общий интерфейс для по-List
прежнему выглядит достаточно похожим наArrayList
реализацию.Сами по себе эти примеры кода, кажется, не добавляют много (кроме большего набора текста), но если вы планируете делать больше, как, например, этот ответ о преобразовании String в List of Longs , потоковый API действительно мощный, позволяя направлять ваши операции один за другим.
Ради, вы знаете, полноты.
источник
источник
collect(toList())
наcollect(Collectors.toList()
collect(toList())
используется статический импортCollectors.toList()
для краткости и беглости :)Для этого нет встроенного метода, но вы можете просто использовать метод split () в этом.
источник
Это должно работать для вас.
источник
Вы можете комбинировать asList и split
источник
Этот код поможет,
источник
Вы можете использовать Guava для разделения строки и преобразования ее в ArrayList. Это также работает с пустой строкой и возвращает пустой список.
выводит следующее:
источник
Пример использования
Collections
.источник
Есть много способов решить эту проблему с помощью потоков в Java 8, но IMO следующие прямые линии:
источник
Вы можете сначала разделить их, используя
String.split(",")
, а затем преобразовать возвращенную строкуarray
вArrayList
использованиеArrays.asList(array)
источник
В groovy вы можете использовать метод tokenize (Character Token):
источник
Того же результата вы можете достичь, используя класс Splitter.
(написано в котлине)
источник
источник
Я обычно использую предварительно скомпилированный шаблон для списка. А также это немного более универсально, так как он может рассматривать скобки, которые следуют за некоторыми выражениями listToString.
источник
В Kotlin, если ваш список строк, как это, и вы можете использовать для преобразования строки в ArrayList, используйте эту строку кода
источник
источник
Вы можете сделать это следующим образом.
Это удаляет пробелы и разделяет их запятыми, когда вам не нужно беспокоиться о пробелах.
источник
Строка -> Преобразование коллекции : (Строка -> Строка [] -> Коллекция)
Коллекция -> Строка [] преобразование:
String -> String [] преобразование:
И Коллекция -> Коллекция :
источник
преобразовать коллекцию в строку как запятую в Java 8
Объект listOfString содержит элементы ["A", "B", "C", "D"]
Вывод: - «A», «B», «C», «D»
И конвертировать массив строк в список в Java 8
источник
источник
ArrayList
? Ты вообще читал вопрос?ArrayList
. Я откатил правки до первой ревизии (чтобы вы могли это видеть) и улучшил форматирование первой ревизии.