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

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

String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = //method that converts above string into list??
+507
источник поделиться
25 ответов

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

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>.

+952
источник

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 (это только один вариант).

+187
источник
другие ответы

Связанные вопросы


Похожие вопросы

Два шага:

  1. String [] items = commaSeparated.split("\\s*,\\s*");
  2. List<String> container = Arrays.asList(items);
+68
источник

Вот еще один вариант для преобразования 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));
}

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

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

+22
источник

Если 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 действительно мощен, позволяя направлять ваши операции один за другим.

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

+20
источник

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

String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = 
new  ArrayList<String>(Arrays.asList(commaSeparated.split(",")));
+15
источник
List<String> items= Stream.of(commaSeparated.split(","))
     .map(String::trim)
     .collect(toList());
+14
источник
List<String> items = Arrays.asList(commaSeparated.split(","));

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

+13
источник

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

Arrays.asList(CommaSeparated.split("\\s*,\\s*"))
+10
источник

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

String myStr = "item1,item2,item3";
List myList = Arrays.asList(myStr.split(","));
+7
источник

Вы можете использовать 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]
+5
источник

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

import java.util.Collections;
 ...
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = new ArrayList<>();
Collections.addAll(items, commaSeparated.split("\\s*,\\s*"));
 ...
+4
источник

Существует много способов решить эту проблему с помощью потоков в 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());
+3
источник

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

+2
источник

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

list = str.tokenize(',')
+2
источник
List commaseperated = new ArrayList();
String mylist = "item1 , item2 , item3";
mylist = Arrays.asList(myStr.trim().split(" , "));

// enter code here
+1
источник

Обычно я использую прекомпилированный шаблон для списка. А также это несколько более универсально, поскольку он может рассматривать скобки, которые следуют за некоторыми выражениями 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();
+1
источник
List<String> items = Arrays.asList(s.split("[,\\s]+"));
0
источник

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

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

    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);
0
источник

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

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

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

0
источник

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

var str= "item1, item2, item3, item4"
var itemsList = str.split(", ")
0
источник

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);
-1
источник

конвертировать сборку в строку как разделяемую запятую в 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());
-2
источник
ArrayList<HashMap<String, String>> mListmain = new ArrayList<HashMap<String, String>>(); 
String marray[]= mListmain.split(",");
-4
источник

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

Пример

StringUtils.join(yourStirng, ',');
-6
источник

Посмотрите другие вопросы по меткам или Задайте вопрос