Как преобразовать строку, разделенную запятой, в 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
Два шага:
-
String [] items = commaSeparated.split("\\s*,\\s*");
-
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, ',');