Как преобразовать строку через запятую в ArrayList?



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



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

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 а также не требует, чтобы вы разделили регулярным выражением (это только один опцион.)

два шага:

  1. String [] items = commaSeparated.split(",");
  2. 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 является очень мощным, что позволяет конвейер операций одна за другой.

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

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

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

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

вы можете объединить asList и split

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

пример использования 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)

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

list = str.tokenize(',')
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();
List<String> items = Arrays.asList(s.split("[,\s]+"));

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

    Ничего не найдено.