#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