【问题标题】:How to convert a String into an ArrayList?如何将字符串转换为 ArrayList?
【发布时间】:2011-11-12 22:54:33
【问题描述】:

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

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

【问题讨论】:

    标签: java string arraylist converter


    【解决方案1】:

    试试类似的东西

    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]
    

    本帖已改写为文章here

    【讨论】:

    • +1:new ArrayList&lt;String&gt;() 可能是多余的,具体取决于它的使用方式。 (就像在你的例子中一样;)
    • 呵呵,是的,+1 :-) 实际上它甚至可能只是他的 split 之后:P
    • 他必须使用Arrays.toString() 来打印它,但是是的。
    • 新的 ArrayList() 导致创建一个新列表,其中包含返回的列表。 Arrays.asList(a) 返回一个 List 对象,因此不要调用 new ArrayList 你会得到不需要的行为。
    • 请注意,您不能将元素添加到 Arrays.asList 返回的列表中。 OP想要一个ArrayList(这是完全合理的)并且ArrayList构造必要的。
    【解决方案2】:
     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());
    

    【讨论】:

    • 如果你必须修剪括号,你可以通过replace = s1.replaceAll("^\\[|]$", "");一步完成
    • 我使用了这个答案,但我的用户有时使用"," 和其他", " 作为分隔符,所以我在split 函数之前添加了一个.replaceAll(", ", ",")
    【解决方案3】:

    选项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. 它的性能要好得多(但它返回一个固定大小的列表)。

    请参考文档here

    【讨论】:

    • 为什么这不起作用List&lt;Character&gt; word1 = new ArrayList&lt;Character&gt;(Arrays.asList(A[0].toCharArray())); 我正在尝试获取字符串数组的第一个字符串,并将该字符串转换为 charArray 并将该 charArray 转换为 List
    • 那是因为,Arrays 类中的 asList 方法只接受 Object 数组,而不接受原始数组。如果将 char[] 转换为 Character[] 数组,它将起作用。
    • public static Character[] boxToCharacter(char[] charArray) { Character[] newArray = new Character[charArray.length];诠释 i = 0; for (char value : charArray) { newArray[i++] = Character.valueOf(value); } 返回新数组; }
    【解决方案4】:

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

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

    【讨论】:

    • s.split("\\s*,\\s*") 可以添加额外的照顾
    【解决方案5】:

    这样比较容易理解:

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

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:

        如果您正在导入或者您的代码中有一个数组(字符串类型),并且您必须将其转换为 arraylist(offcourse 字符串),那么使用集合会更好。像这样:

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

        【讨论】:

          【解决方案8】:

          你可以使用:

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

          【讨论】:

            【解决方案9】:

            如果您想将 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;
            }
            

            但我在您的示例中看到了一个字符串数组,因此如果您想将 字符串数组 转换为 ArrayList,请使用:

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

            【讨论】:

            • 一个更简单的基于字符的方法是: ArrayList myList = new ArrayList(); for(字符 c :s.toCharArray() ) { myList.add(c.toString());但我不认为这是这个人正在寻找的。 aioobe 的解决方案是所需要的。欢呼
            【解决方案10】:

            这是在 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])
            

            【讨论】:

              【解决方案11】:

              我们来回答一个问题:反转字符串。我将使用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
              */
              

              【讨论】:

              • 所以...您正在使用公认的解决方案来举例说明不同的问题?为什么?
              【解决方案12】:

              我推荐使用StringTokenizer,效率很高

                   List<String> list = new ArrayList<>();
              
                   StringTokenizer token = new StringTokenizer(value, LIST_SEPARATOR);
                   while (token.hasMoreTokens()) {
                         list.add(token.nextToken());
                   }
              

              【讨论】:

                【解决方案13】:

                如果您使用的是番石榴(您应该使用,请参阅 effective java item #15):

                ImmutableList<String> list = ImmutableList.copyOf(s.split(","));
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2019-09-04
                  • 2014-03-06
                  • 2016-09-12
                  • 2012-01-20
                  • 2012-04-28
                  • 2012-07-15
                  • 2015-09-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多