【问题标题】:convert string to arraylist <Character> in java在java中将字符串转换为arraylist <Character>
【发布时间】:2013-02-26 05:15:57
【问题描述】:

如何将不带分隔符的字符串转换为ArrayList&lt;Character&gt;

我的字符串是这样的:

String str = "abcd..."

我知道这样做的一种方法是先将字符串转换为char[],然后将char [] 转换为ArrayList &lt;Character&gt;

有没有更好的方法来做到这一点?喜欢直接转换?考虑时间和性能,因为我正在使用大型数据库进行编码。

【问题讨论】:

  • 那么...您想获取隐式字符串并将其中的每个字符转换为某种集合吗?如果是这样,您尝试过什么?一些示例代码会很有帮助。
  • 您真的要转换为ArrayList 还是只是将字符串包装成由原始字符串支持的List
  • @Makoto 我试过 'char [] chars = str.toCharArray (); ArrayList mylist = new ArrayList (); for (char c : chars) mylist.add (c);'
  • @MikhailVladimirov 我真的很想把它转换成 ArrayList
  • @squiguy 正如我在下面提到的,您的代码似乎无法正常工作。

标签: java string list arraylist converter


【解决方案1】:

如果您不需要在创建后修改列表,可能更好的方法是将字符串包装到实现List&lt;Character&gt;接口的类中,如下所示:

import java.util.AbstractList;
import java.util.List;

public class StringCharacterList extends AbstractList <Character>
{
    private final String string;

    public StringCharacterList (String string)
    {
        this.string = string;
    }

    @Override
    public Character get (int index)
    {
        return Character.valueOf (string.charAt (index));
    }

    @Override
    public int size ()
    {
        return string.length ();
    }
}

然后像这样使用这个类:

List <Character> l = new StringCharacterList ("Hello, World!");
System.out.println (l);

【讨论】:

  • 谢谢,但我需要的是一个 ArrayList :)
【解决方案2】:
public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str = "abcd...";
        ArrayList<Character> a=new ArrayList<Character>();
        for(int i=0;i<str.length();i++)
        {
            a.add(str.charAt(i));

        }
        System.out.println(a);
    }

【讨论】:

    【解决方案3】:

    你需要像这样添加它。

    String str = "abcd...";
    ArrayList<Character> chars = new ArrayList<Character>();
    for (char c : str.toCharArray()) {
      chars.add(c);
    }
    

    【讨论】:

    • 好吧。我不认为它有效。 str.toCharArray() 将返回 char [],而您将其分配给 Character 类型的 ArrayList。更准确地说,您不能像这样将基元数组转换为 ArrayList。
    • 这应该可行:),但是正如我提到的,您先将字符串转换为char数组,然后将其逐个添加以获取ArrayList。我正在考虑空间和时间成本,而字符串非常大并且数据库中的字符串数量也很大。
    • @aga_pan 嗯,除非您冒险进入一些第三方库,否则我不确定是否有解决方法。至少打败我!
    • @aga_pan 最后,我确信虚拟机会优化循环编译字节码的效率。找出答案的唯一方法是选择一些方法并尝试一下。
    【解决方案4】:

    你可以这样做:

    import java.util.ArrayList;
    
    public class YourClass{
    
        public static void main(String [] args){
    
            ArrayList<Character> char = new ArrayList<Character>();
            String str = "abcd...";
    
            for (int x = 0; x < str.length(); x ++){
                char.add(str.charAt(x));
            }
        }
    }
    

    【讨论】:

      【解决方案5】:

      抱歉,Retrobump,但这现在真的很容易!

      您可以在 Java 8 中使用 Streams 轻松地做到这一点!试试这个:

      String string = "testingString";
      List<Character> list = string.chars().mapToObj((i) -> Character.valueOf((char)i)).collect(Collectors.toList());
      System.out.println(list);
      

      您需要使用mapToObj,因为chars() 返回一个IntStream

      【讨论】:

      • 错误:(13, 114) java: 不兼容的类型: 推理变量 R 具有不兼容的边界等式约束: java.util.List 上限: java.util.ArrayList,java.lang.Object
      【解决方案6】:

      使用 lambda 表达式来做到这一点。

      String big_data = "big-data";
      ArrayList<Character> chars
              = new ArrayList<>(
                       big_data.chars()
                      .mapToObj(e -> (char) e)
                      .collect(
                              Collectors.toList()
                      )
              );    
      

      【讨论】:

        【解决方案7】:
        String myString = "xxx";
        ArrayList<Character> myArrayList = myString.chars().mapToObj(x -> (char) x).collect(toCollection(ArrayList::new));
        myArrayList.forEach(System.out::println);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-07-12
          • 1970-01-01
          • 2012-08-29
          • 1970-01-01
          • 2016-06-23
          • 2015-08-06
          • 2019-09-04
          相关资源
          最近更新 更多