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

#java #arraylist #csv

#java #arraylist #csv

Вопрос:

Как добавить строку, разделенную запятыми, в ArrayList? Моя строка «returnedItems» может содержать 1 или 20 элементов, которые я хотел бы добавить в мой ArrayList «selItemArrayList».

После заполнения ArrayList я хотел бы позже выполнить итерацию по нему и отформатировать элементы в строку, разделенную запятыми, без пробелов между элементами.

Комментарии:

1. из каких данных состоят возвращаемые элементы? Похоже на «test, test2, test567» и так далее?

2. Привет, Владимир, да, он состоит из «моркови, лука, чеснока» и т.д..

3. Хотя имейте в виду, что все может стать гораздо сложнее, если сами строки могут содержать запятые. (смотрите Мой ответ ниже)

Ответ №1:

 String returnedItems = "a,b,c";
List<String> sellItems = Arrays.asList(returnedItems.split(","));
  

Теперь выполните итерацию по списку и добавьте каждый элемент в StringBuilder:

 StringBuilder sb = new StringBuilder();
for(String item: sellItems){
    if(sb.length() > 0){
        sb.append(',');
    }
    sb.append(item);
}
String result = sb.toString();
  

Комментарии:

1. Начиная с Java 8, вы можете объединяться с помощью: String joined = String.join(«,», sellItems);

Ответ №2:

Однострочники всегда популярны:

 Collections.addAll(arrayList, input.split(","));
  

Ответ №3:

split и asList сделайте свое дело:

 String [] strings = returnedItems.split(",");
List<String> list = Arrays.asList(strings);
  

Ответ №4:

Простой однострочный:

 selItemArrayList.addAll(Arrays.asList(returnedItems.split("\s*,\s*")));
  

Конечно, это будет сложнее, если у вас есть записи с запятыми в них.

Комментарии:

1. Отлично! Когда я сохраняю список в виде строки с помощью aList.toString(), элементы в списке разделяются запятой и пробелом после запятой. С помощью этого регулярного выражения при разделении я могу снова поместить в список правильные элементы!

Ответ №5:

Это может помочь:

 for (String s : returnedItems.split(",")) {
    selItemArrayList.add(s.trim());
}

//Shorter and sweeter
String [] strings = returnedItems.split(",");
selItemArrayList = Arrays.asList(strings);

//The reverse....

StringBuilder sb = new StringBuilder();
Iterator<String> iter = selItemArrayList.iterator();
while (iter.hasNext()) {
    if (sb.length() > 0) 
        sb.append(",");
    sb.append(iter.next());
}

returnedItems = sb.toString();
  

Ответ №6:

Если сами строки могут содержать запятые, все становится сложнее. Вместо того, чтобы создавать свои собственные, рассмотрите возможность использования одного из многих анализаторов CSV с открытым исходным кодом. Хотя они предназначены для чтения в файлах, по крайней мере, OpenCSV также проанализирует отдельную строку, которую вы передаете.

Ответ №7:

Если отдельные элементы не заключены в кавычки, то:

  QString str = "a,,b,c";

 QStringList list1 = str.split(",");
 // list1: [ "a", "", "b", "c" ]
  

Если элементы заключены в кавычки, я бы добавил символы «[]» и использовал анализатор JSON.

Комментарии:

1. Упс!! Это был Qt. Но я уверен, что в Java есть эквивалент.

Ответ №8:

Вы могли бы использовать split() метод для String для преобразования строки в массив, который вы могли бы перебирать в цикле.

Хотя вы могли бы пропустить цикл и синтаксический анализ с помощью регулярного выражения, чтобы удалить пробелы с помощью replaceAll() в строке.

Ответ №9:

 String list = "one, two, three, four";
String[] items = list.split("\p{Punct}");
List<String> aList = Arrays.asList(items);
System.out.println("aList = "   aList);
StringBuilder formatted = new StringBuilder();

for (int i = 0; i < items.length; i  )
{
    formatted.append(items[i].trim());
    if (i < items.length - 1) formatted.append(',');
}

System.out.println("formatted = "   formatted.toString());
  

Ответ №10:

 import com.google.common.base.*;

Iterable<String> items = Splitter.on(",").omitEmptyStrings()
                                 .split("Mango,Apple,Guava");

// Join again!
String itemsString = Joiner.join(",").join(items);
  

Ответ №11:

 String csv = "Apple, Google, Samsung";
  

шаг первый: преобразование строки, разделенной запятой, в массив String

 String[] elements = csv.split(",");
  

шаг второй: преобразуйте массив строк в список строк

  List<String> fixedLenghtList = Arrays.asList(elements);
  

шаг третий: скопируйте фиксированный список в ArrayList
Список массивов listOfString = новый список массивов (fixedLenghtList);

 System.out.println("list from comma separated String : "   listOfString);
  

System.out.println(«размер списка массивов : » listOfString.size());
Вывод :

 list of comma separated String : [Apple, Google, Samsung]


size of ArrayList : 3