Как преобразовать строку через запятую в ArrayList?
есть ли встроенный метод в Java, который позволяет нам конвертировать строку, разделенную запятыми, в некоторый контейнер (например, массив, список или вектор)? Или мне нужно написать пользовательский код для этого?
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = //method that converts above string into list??
23 ответов:
преобразование строки через запятую в список
List<String> items = Arrays.asList(str.split("\s*,\s*"));приведенный выше код разбивает строку на разделитель определено как:
zero or more whitespace, a literal comma, zero or more whitespaceкоторый поместит слова в список и свернет любые пробелы между словами и запятыми.
обратите внимание, что это возвращает просто обертку на массив: you не могу
.remove()из получившегосяList. Для фактическогоArrayListвы должны использоватьnew ArrayList<String>.
Arrays.asListвозвращает фиксированный размерListпри поддержке массива. Если вы хотите нормальный изменяемыйjava.util.ArrayListвы должны сделать это:List<String> list = new ArrayList<String>(Arrays.asList(string.split(" , ")));или гуавы:
List<String> list = Lists.newArrayList(Splitter.on(" , ").split(string));С помощью
Splitterдает вам больше гибкости в том, как разделить строку, и дает вам возможность, например, пропустить пустые строки в результатах и отделку результаты. Он также имеет менее странное поведение, чемString.splitа также не требует, чтобы вы разделили регулярным выражением (это только один опцион.)
два шага:
String [] items = commaSeparated.split(",");List<String> container = Arrays.asList(items);
вот еще один для преобразования 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)); }печать вы
-->строка
-->с
-->запятая
для этого нет встроенного метода, но вы можете просто использовать метод split() в этом.
String commaSeparated = "item1 , item2 , item3"; ArrayList<String> items = new ArrayList<String>(Arrays.asList(commaSeparated.split(",")));
если a
Listявляется конечной целью, как заявил ОП, то уже принятый ответ по-прежнему является самым коротким и лучшим. Однако я хочу предоставить вам альтернативы с помощью Java 8 Streams, это даст вам больше пользы, если он является частью газопровода для дальнейшей обработки.путем обертывания результата .функция разделения (собственный массив) в поток, а затем преобразование в список.
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 разбора регулярных выражений:
ArrayList<String> list = Pattern.compile(",") .splitAsStream("a,b,c") .collect(Collectors.toCollection(ArrayList<String>::new));обратите внимание, что вы все еще можете рассмотреть возможность оставить
listпеременной с типомList<String>вместоArrayList<String>. Универсальный интерфейс дляListвсе еще выглядит достаточно похожим наArrayListреализация.сами по себе эти примеры кода, похоже, не добавляют много (кроме большего набора текста), но если вы планируя сделать больше, как это ответ на преобразование строки в список лонгов пример, потоковый API является очень мощным, что позволяет конвейер операций одна за другой.
ради, знаете ли, полноты.
пример использования
Collections.import java.util.Collections; ... String commaSeparated = "item1 , item2 , item3"; ArrayList<String> items = new ArrayList<>(); Collections.addAll(items, commaSeparated.split("\s*,\s*")); ...
Это ниже код может помочь вам,
List myList = new ArrayList(); String myStr = "item1 , item2 , item3"; myList = Arrays.asList(myStr.split(" , "));
Вы можете использовать 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]
вы можете сначала разделить их с помощью
String.split(","), а затем преобразовать возвращенную строкуarrayдоArrayListиспользуяArrays.asList(array)
List commaseperated = new ArrayList(); String mylist = "item1 , item2 , item3"; mylist = Arrays.asList(myStr.trim().split(" , ")); // enter code here
Я обычно использую скомпилированный шаблон для списка. А также это немного более универсально, поскольку он может рассматривать скобки, которые следуют за некоторыми выражениями 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();
есть много способов решить эту проблему с помощью потоков в Java 8 но ИМО следующие один лайнеры прямо вперед:
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());
вы можете сделать это следующим образом.
это удаляет пробелы и разделяется запятой, где вам не нужно беспокоиться о пробелах.
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);
того же результата можно достичь с помощью класса Splitter.
var list = Splitter.on(",").splitToList(YourStringVariable)(написано в Котлин)
Строка -> Коллекция преобразование: (строка -> строка[] -> коллекция)
// 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[] se = col.toArray(new String[col.size()]);Строка -> Строка[] преобразования:
String[] strArr = str.split(",");и Коллекция -> Коллекция:
List<String> list = new LinkedList<>(col);
преобразование коллекции в строку как запятая разделены в Java 8
объект listOfString содержит ["A","B"," C"," D"] элементы-
listOfString.stream().map(ele->"'"+ele+"'").collect(Collectors.joining(","))выход :- 'A','B','C', 'D'
и преобразовать массив строк в список в Java 8
String string[] ={"A","B","C","D"}; List<String> listOfString = Stream.of(string).collect(Collectors.toList());
ArrayList<HashMap<String, String>> mListmain = new ArrayList<HashMap<String, String>>(); String marray[]= mListmain.split(",");
Comments