如何将一个string转换成一个ArrayList?

在我的string中,我可以有任意数量的逗号分隔的单词。 我想每个单词添加到一个ArrayList。 例如:

String s = "a,b,c,d,e,........."; 

尝试类似

 List<String> myList = new ArrayList<String>(Arrays.asList(s.split(","))); 
  • Arrays.asList文档
  • String.split文档
  • ArrayList(Collection)构造函数文档

演示:

 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(",")); 

如果你想把一个string转换成一个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; } 

但是我在你的例子中看到一个string数组,所以如果你想将一个string数组转换成ArrayList,使用这个:

 public static ArrayList<String> convertStringArrayToArraylist(String[] strArr){ ArrayList<String> stringList = new ArrayList<String>(); for (String s : strArr) { stringList.add(s); } return stringList; } 

如果你正在导入,或者你的代码中有一个数组(stringtypes),你必须将其转换为数组列表(离线string),那么使用集合更好。 喜欢这个:

 String array1[] = getIntent().getExtras().getStringArray("key1"); or String array1[] = ... then List allEds = new ArrayList(); Collections.addAll(allEds, array1); 

好吧,我将扩大在这里的答案,因为很多来这里的人想要用空格分割string。 这是如何完成的:

 List<String> List = new ArrayList<String>(Arrays.asList(s.split("\\s+"))); 

选项1

 List<String> list = Arrays.asList("hello"); 

选项2

 List<String> list = new ArrayList<String>(Arrays.asList("hello")); 

在我看来,Option1更好,因为

  1. 我们可以将创build的ArrayList对象的数量从2减less到1. asList方法创build并返回一个ArrayList对象。
  2. 它的性能要好得多(但它返回一个固定大小的列表)。

请参考这里的文档

你可以使用:

 List<String> tokens = Arrays.stream(s.split("\\s+")).collect(Collectors.toList()); 

你应该问自己,如果你真的需要ArrayList的话。 通常情况下,您将根据附加条件筛选列表,对于这些条件,Stream是完美的。 你可能想要一套; 您可能需要通过另一个正则expression式等来过滤它们。Java 8提供了这个非常有用的扩展,顺便说一下,它可以在任何CharSequence上工作: https : //docs.oracle.com/javase/8/docs/ api / java / util / regex / Pattern.html#splitAsStream-java.lang.CharSequence- 。 由于你完全不需要这个数组,因此避免这样创build它:

 // This will presumably be a static final field somewhere. Pattern splitter = Pattern.compile("\\s+"); // ... String untokenized = reader.readLine(); Stream<String> tokens = splitter.splitAsStream(untokenized);