Как преобразовать строку в ArrayList?
в моей строке я могу иметь произвольное количество слов, которые разделены запятыми. Я хотел, чтобы каждое слово добавлялось в ArrayList. Например:
String s = "a,b,c,d,e,.........";
10 ответов:
попробуйте что-то вроде
List<String> myList = new ArrayList<String>(Arrays.asList(s.split(",")));
демо:
String s = "lorem,ipsum,dolor,sit,amet"; List<String> myList = new ArrayList<String>(Arrays.asList(s.split(","))); System.out.println(myList); // prints [lorem, ipsum, dolor, sit, amet]
этот пост был переписан как статья здесь.
String s1="[a,b,c,d]"; String replace = s1.replace("[",""); System.out.println(replace); String replace1 = replace.replace("]",""); System.out.println(replace1); List<String> myList = new ArrayList<String>(Arrays.asList(replace1.split(","))); System.out.println(myList.toString());
в Java 9, используя
List#of
, который является неизменяемым списком статических заводских методов, стал более простым.String s = "a,b,c,d,e,........."; List<String> lst = List.of(s.split(","));
Option1:
List<String> list = Arrays.asList("hello");
Option2:
List<String> list = new ArrayList<String>(Arrays.asList("hello"));
на мой взгляд, Option1 лучше, потому что
- мы можем уменьшить количество создаваемых объектов ArrayList с 2 до 1.
asList
метод создает и возвращает объект ArrayList.- его производительность намного лучше (но он возвращает список фиксированного размера).
пожалуйста, обратитесь к документации здесь
Если вы хотите конвертировать a строка на ArrayList попробуйте это:
public ArrayList<Character> convertStringToArraylist(String str) { ArrayList<Character> charList = new ArrayList<Character>(); for(int i = 0; i<str.length();i++){ charList.add(str.charAt(i)); } return charList; }
но я вижу строковый массив в вашем примере, так что если вы хотите преобразовать строковый массив на ArrayList используйте этот:
public static ArrayList<String> convertStringArrayToArraylist(String[] strArr){ ArrayList<String> stringList = new ArrayList<String>(); for (String s : strArr) { stringList.add(s); } return stringList; }
Если вы импортируете или у вас есть массив (типа string) в коде, и вы должны преобразовать его в arraylist (offcourse string), то использование коллекций лучше. вот так:
String array1[] = getIntent().getExtras().getStringArray("key1"); or String array1[] = ... then List allEds = new ArrayList(); Collections.addAll(allEds, array1);
хорошо, я собираюсь расширить ответы здесь, так как многие люди, которые приходят сюда, хотят разделить строку на пробел. Вот как это делается:
List<String> List = new ArrayList<String>(Arrays.asList(s.split("\s+")));
вы могли бы использовать:
List<String> tokens = Arrays.stream(s.split("\s+")).collect(Collectors.toList());
вы должны спросить себя, действительно ли вам нужен ArrayList в первую очередь. Очень часто вы собираетесь фильтровать список на основе дополнительных критериев, для которых поток идеально подходит. Вам может понадобиться набор; Вы можете фильтровать их с помощью другого регулярного выражения и т. д. Java 8 предоставляет это очень полезное расширение, кстати, которое будет работать на любом
CharSequence
: https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#splitAsStream-java.lang.CharSequence-. так как вам не нужен массив вообще, не создавайте его таким образом:// This will presumably be a static final field somewhere. Pattern splitter = Pattern.compile("\s+"); // ... String untokenized = reader.readLine(); Stream<String> tokens = splitter.splitAsStream(untokenized);
давайте возьмем вопрос: обратная строка. Я сделаю это с помощью stream().собирать.)( Но сначала я изменю строку в ArrayList .
public class StringReverse1 { public static void main(String[] args) { String a = "Gini Gina Proti"; List<String> list = new ArrayList<String>(Arrays.asList(a.split(""))); list.stream() .collect(Collectors.toCollection( LinkedList :: new )) .descendingIterator() .forEachRemaining(System.out::println); }} /* The output : i t o r P a n i G i n i G */