2013-03-11 11 views
12

セパレータなしの文字列をArrayList<Character>に変換する方法。文字列をarraylistに変換する<Character> in java

私の文字列は、このようなものです:

String str = "abcd..." 

私はこれを行うための一つの方法は、最初のchar[]に文字列を変換し、その後char []ArrayList <Character>に変換知っています。

これを行うにはもっと良い方法はありますか?直接変換したいのですか?時間とパフォーマンスを考慮すると、私は大きなデータベースでコーディングしているからです。

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

そして、このように、このクラスを使用します:あなたはそれを作成した後にリストを変更する必要はありませDN場合

+0

だから...暗黙的な文字列を取り込み、その中の各文字を何らかのコレクションに変換したいですか?その場合、何を試しましたか?いくつかのサンプルコードは有益です。 – Makoto

+0

本当に 'ArrayList'に変換したいのですか、文字列を元の文字列に裏打ちされた' List'にラップするだけですか? –

+0

@Makoto私は 'char [] chars = str.toCharArray();を試しました。 ArrayList mylist = new ArrayList (); for(char c:chars)mylist.add(c); ' –

答えて

2

、おそらくより良い方法は、このようなList<Character>インタフェースを実装するクラスに文字列をラップすることです

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

ありがとう、しかし、私が必要なのはArrayListです。 –

1
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); 
    } 
+0

ありがとう、私は私の記事で述べたようにこの方法を試しました。 –

10

このように追加する必要があります。

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

。私はそれが動作するとは思わない。 str.toCharArray()はchar型のArrayListに割り当てている間にchar []を返します。より正確に言えば、プリミティブの配列をこのようなArrayListに変換することはできません。 –

+0

@aga_panそれを更新しました。 – squiguy

+0

これはうまくいくはずです:)しかし、先ほど触れたように、まず文字列をchar配列に変換し、それを1つずつ追加してArrayListを取得します。文字列が非常に大きく、文字列の数もデータベースで膨大なものになっていますが、スペースと時間のコストを考慮しています。 –

0

あなたはこのようにそれを行うことができます。

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

あり一行guavaソリューションです:

Lists.charactersOf("hello"); 

あなたはArrayListのコンストラクタにImmutableListを結果として渡すことができますが、私は理由を求めることができますあなたはまさにArrayListが必要ですか?

1

Retrobumpは申し訳ありませんが、これは本当に簡単です!

Streamsを使用してJava 8でこれを簡単に実行できます。これを試してください:あなたはchars()IntStreamを返すためmapToObjを使用する必要が

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

4

これを行うにはラムダ式を使用します。

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