Как преобразовать разделенную запятыми строку в ArrayList? - PullRequest
493 голосов
/ 20 сентября 2011

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

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

Ответы [ 23 ]

5 голосов
/ 27 июля 2017

Вы можете использовать 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]
4 голосов
/ 08 октября 2013

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

import java.util.Collections;
 ...
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = new ArrayList<>();
Collections.addAll(items, commaSeparated.split("\\s*,\\s*"));
 ...
3 голосов
/ 29 сентября 2017

Есть много способов решить эту проблему, используя потоки в 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());
2 голосов
/ 20 сентября 2011

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

1 голос
/ 13 июля 2016

Я обычно использую предварительно скомпилированный шаблон для списка. А также это немного более универсально, так как он может рассматривать скобки, которые следуют за некоторыми выражениями 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 голос
/ 28 июня 2013

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

list = str.tokenize(',')
1 голос
/ 13 июля 2015
List commaseperated = new ArrayList();
String mylist = "item1 , item2 , item3";
mylist = Arrays.asList(myStr.trim().split(" , "));

// enter code here
0 голосов
/ 29 июня 2018

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

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

(написано в kotlin)

0 голосов
/ 22 июня 2018

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

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

    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 голосов
/ 31 марта 2016
ArrayList<HashMap<String, String>> mListmain = new ArrayList<HashMap<String, String>>(); 
String marray[]= mListmain.split(",");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...