如何将字符串转换为ArrayList?


101

在我的字符串中,我可以有任意多个以逗号分隔的单词。我希望将每个单词添加到ArrayList中。例如:

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

Answers:


251

尝试类似

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]

这篇文章在这里已被重写为文章。


9
+1:new ArrayList<String>()视使用方式而定可能是多余的。(如您的示例所示;)
Peter Lawrey 2011年

1
呵呵,是的,+ 1 :-)实际上,它甚至可能只是split他的之后:P
aioobe 2011年

他将不得不使用Arrays.toString()它进行打印,但是可以。
彼得·劳瑞

新的ArrayList <String>()导致创建一个新列表,并在其中包含返回的列表。Arrays.asList(a)返回一个List对象,因此不要调用新的ArrayList,您会得到不想要的行为。
Clocker 2014年

6
请注意,您不能将元素添加到Arrays.asList返回的列表中。OP希望有一个ArrayList(这是完全合理的),并且ArrayList的构造必需的。
aioobe 2014年

32
 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());

8
如果您需要修剪支架,可以与replace = s1.replaceAll("^\\[|]$", "");
David Ehrmann

9

选项1

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

选项2

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

我认为Option1更好,因为

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

请在这里参考文档


为什么这项工作不起作用, List<Character> word1 = new ArrayList<Character>(Arrays.asList(A[0].toCharArray()));我尝试获取字符串数组的第一个String,并将该字符串转换为charArray并将该charArray转换为List <Character>
sofs1

这是因为Arrays类中的asList方法仅采用Object数组,而不采用原始数组。如果将char []转换为Character []数组,它将起作用。
安迪

公共静态Character [] boxToCharacter(char [] charArray){Character [] newArray = new Character [charArray.length]; int i = 0; for(char value:charArray){newArray [i ++] = Character.valueOf(value); } return newArray; }
Andy

8

在Java 9中,使用List#of,这是不可变列表静态工厂方法,变得更加简单。

 String s = "a,b,c,d,e,.........";
 List<String> lst = List.of(s.split(","));

s.split("\\s*,\\s*")可以添加额外的照顾
Vishwajit R.辛德

2

如果要导入,或者代码中有数组(字符串类型),并且必须将其转换为arraylist(会话字符串),则使用集合更好。像这样:

String array1[] = getIntent().getExtras().getStringArray("key1"); or String array1[] = ... then

List allEds = new ArrayList(); Collections.addAll(allEds, array1);

2

好吧,我将在这里扩展答案,因为很多来这里的人都希望将字符串用空格分隔。这是这样做的:

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

2

您可以使用:

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

首先,您应该问自己是否真的需要ArrayList。通常,您会根据其他条件来过滤列表,而Stream是最适合的条件。您可能需要一套;您可能希望通过另一个正则表达式等对它们进行过滤。顺便说一下,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);

1

如果要将字符串转换为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;
}

一种更简单的基于字符的方法是:ArrayList <String> myList = new ArrayList <String>(); for(字符c:s.toCharArray()){myList.add(c.toString()); }但我认为这不是该人正在寻找的东西。需要aioobe解决方案。欢呼声
Steve

1

更容易理解的是这样的:

String s = "a,b,c,d,e";
String[] sArr = s.split(",");
List<String> sList = Arrays.asList(sArr);

1

这是在Kotlin中使用Gson

 val listString = "[uno,dos,tres,cuatro,cinco]"
 val gson = Gson()
 val lista = gson.fromJson(listString , Array<String>::class.java).toList()
 Log.e("GSON", lista[0])

0

让我们问一个问题:反转字符串。我将使用stream()。collect()进行此操作。但是首先,我将字符串更改为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
*/

1
所以...您正在使用公认的解决方案来举例说明另一个问题?为什么?
Francesco B.

0

我建议使用StringTokenizer,非常有效

     List<String> list = new ArrayList<>();

     StringTokenizer token = new StringTokenizer(value, LIST_SEPARATOR);
     while (token.hasMoreTokens()) {
           list.add(token.nextToken());
     }

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.