Как преобразовать строку, разделенную запятой, в ArrayList?

Есть ли встроенный метод в Java, который позволяет нам преобразовывать разделенные запятыми строки в какой-либо контейнер (например, массив, список или вектор)? Или мне нужно написать для этого специальный код?

String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = //method that converts above string into list??

Ответ 1

Преобразование разделенных запятыми строк в список

List<String> items = Arrays.asList(str.split("\\s*,\\s*"));

Вышеприведенный код разбивает строку на разделитель, определяемый как: zero or more whitespace, a literal comma, zero or more whitespace, который помещает слова в список и сворачивает любые пробелы между словами и запятыми.


Обратите внимание, что это возвращает просто оболочку массива: вы НЕ МОЖЕТ, например .remove() из результирующего List. Для фактического ArrayList вы должны использовать new ArrayList<String>.

Ответ 2

Arrays.asList возвращает фиксированный размер List, поддерживаемый массивом. Если вы хотите нормальный изменяемый java.util.ArrayList, вам нужно сделать это:

List<String> list = new ArrayList<String>(Arrays.asList(string.split(" , ")));

Или, используя Guava:

List<String> list = Lists.newArrayList(Splitter.on(" , ").split(string));

Использование Splitter дает вам больше гибкости в том, как вы разбиваете строку и дает вам возможность, например, пропускать пустые строки в результатах и ​​обрезать результаты. Он также имеет менее странное поведение, чем String.split, а также не требует разделения на regex (это только один вариант).

Ответ 3

Два шага:

  1. String [] items = commaSeparated.split("\\s*,\\s*");
  2. List<String> container = Arrays.asList(items);

Ответ 4

Вот еще один вариант для преобразования CSV в ArrayList:

String str="string,with,comma";
ArrayList aList= new ArrayList(Arrays.asList(str.split(",")));
for(int i=0;i<aList.size();i++)
{
    System.out.println(" -->"+aList.get(i));
}

Распечатывает вас

- > строка
    - > с
    - > запятой

Ответ 5

Если List является конечной целью, как указано в ОП, то уже принятый ответ по-прежнему является самым коротким и лучшим. Однако я хочу предоставить альтернативы с использованием потоков Java 8, которые дадут вам больше преимуществ, если они будут частью конвейера для дальнейшей обработки.

Оборачивая результат функции .split (собственный массив) в поток, а затем преобразуя его в список.

List<String> list =
  Stream.of("a,b,c".split(","))
  .collect(Collectors.toList());

Если важно, чтобы результат сохранялся в виде ArrayList согласно заголовку из OP, вы можете использовать другой метод Collector:

ArrayList<String> list = 
  Stream.of("a,b,c".split(","))
  .collect(Collectors.toCollection(ArrayList<String>::new));

Или с помощью API-интерфейса синтаксического анализа RegEx:

ArrayList<String> list = 
  Pattern.compile(",")
  .splitAsStream("a,b,c")
  .collect(Collectors.toCollection(ArrayList<String>::new));

Обратите внимание, что вы все равно можете оставить переменную list типом List<String> вместо ArrayList<String>. Общий интерфейс для List все еще выглядит достаточно похожим на реализацию ArrayList.

Сами по себе эти примеры кода, кажется, не добавляют много (кроме большего набора текста), но если вы планируете делать больше, как показано в этом ответе о преобразовании строки в список длинных, потоковый API действительно мощен, позволяя направлять ваши операции один за другим.

Ради, вы знаете, полноты.

Ответ 6

Для этого нет встроенного метода, но вы можете просто использовать метод split() в этом.

String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = 
new  ArrayList<String>(Arrays.asList(commaSeparated.split(",")));

Ответ 7

List<String> items= Stream.of(commaSeparated.split(","))
     .map(String::trim)
     .collect(toList());

Ответ 8

List<String> items = Arrays.asList(commaSeparated.split(","));

Это должно сработать для вас.

Ответ 9

вы можете комбинировать asList и split

Arrays.asList(CommaSeparated.split("\\s*,\\s*"))

Ответ 10

Этот код поможет,

String myStr = "item1,item2,item3";
List myList = Arrays.asList(myStr.split(","));

Ответ 11

Вы можете использовать Guava для разделения строки и преобразования ее в ArrayList. Это также работает с пустой строкой и возвращает пустой список.

import com.google.common.base.Splitter;
import com.google.common.collect.Lists;

String commaSeparated = "item1 , item2 , item3";

// Split string into list, trimming each item and removing empty items
ArrayList<String> list = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().splitToList(commaSeparated));
System.out.println(list);

list.add("another item");
System.out.println(list);

выводит следующее:

[item1, item2, item3]
[item1, item2, item3, another item]

Ответ 12

Пример с использованием Collections.

import java.util.Collections;
 ...
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = new ArrayList<>();
Collections.addAll(items, commaSeparated.split("\\s*,\\s*"));
 ...

Ответ 13

Существует много способов решить эту проблему с помощью потоков в Java 8, но IMO следующие прямые линейки:

String  commaSeparated = "item1 , item2 , item3";
List<String> result1 = Arrays.stream(commaSeparated.split(" , "))
                                             .collect(Collectors.toList());
List<String> result2 = Stream.of(commaSeparated.split(" , "))
                                             .collect(Collectors.toList());

Ответ 14

Вы можете сначала разделить их с помощью String.split(","), а затем преобразовать возвращенную строку array в ArrayList с помощью Arrays.asList(array)

Ответ 15

В groovy вы можете использовать метод tokenize (Character Token):

list = str.tokenize(',')

Ответ 16

List commaseperated = new ArrayList();
String mylist = "item1 , item2 , item3";
mylist = Arrays.asList(myStr.trim().split(" , "));

// enter code here

Ответ 17

Обычно я использую прекомпилированный шаблон для списка. А также это несколько более универсально, поскольку он может рассматривать скобки, которые следуют за некоторыми выражениями listToString.

private static final Pattern listAsString = Pattern.compile("^\\[?([^\\[\\]]*)\\]?$");

private List<String> getList(String value) {
  Matcher matcher = listAsString.matcher((String) value);
  if (matcher.matches()) {
    String[] split = matcher.group(matcher.groupCount()).split("\\s*,\\s*");
    return new ArrayList<>(Arrays.asList(split));
  }
  return Collections.emptyList();

Ответ 18

List<String> items = Arrays.asList(s.split("[,\\s]+"));

Ответ 19

Вы можете сделать это следующим образом.

Это удаляет пробелы и разделяет их запятыми, когда вам не нужно беспокоиться о пробелах.

    String myString= "A, B, C, D";

    //Remove whitespace and split by comma 
    List<String> finalString= Arrays.asList(myString.split("\\s*,\\s*"));

    System.out.println(finalString);

Ответ 20

Того же результата вы можете достичь, используя класс Splitter.

var list = Splitter.on(",").splitToList(YourStringVariable)

(написано в котлине)

Ответ 21

В Kotlin, если ваш список строк такой, и вы можете использовать его для преобразования строки в ArrayList, используйте эту строку кода

var str= "item1, item2, item3, item4"
var itemsList = str.split(", ")

Ответ 22

String → Коллекция: (String → String [] → Collection)

//         java version 8

String str = "aa,bb,cc,dd,aa,ss,bb,ee,aa,zz,dd,ff,hh";

//          Collection,
//          Set , List,
//      HashSet , ArrayList ...
// (____________________________)
// ||                          ||
// \/                          \/
Collection<String> col = new HashSet<>(Stream.of(str.split(",")).collect(Collectors.toList()));

Коллекция → String [] преобразование:

String[] se = col.toArray(new String[col.size()]);

String → String [] преобразование:

String[] strArr = str.split(",");

И Коллекция → Коллекция:

List<String> list = new LinkedList<>(col);

Ответ 23

конвертировать сборку в строку как разделяемую запятую в Java 8

объект listOfString содержит элементы [ "A", "B", "C", "D" ] -

listOfString.stream().map(ele->"'"+ele+"'").collect(Collectors.joining(","))

Выход: - 'А', 'В', 'С', 'D'

И преобразовать массив строк в список на Java 8

    String string[] ={"A","B","C","D"};
    List<String> listOfString = Stream.of(string).collect(Collectors.toList());

Ответ 24

ArrayList<HashMap<String, String>> mListmain = new ArrayList<HashMap<String, String>>(); 
String marray[]= mListmain.split(",");

Ответ 25

Вы можете StringUtils из apache lib.

Пример

StringUtils.join(yourStirng, ',');