文字列をArrayListに変換する方法は?


101

私の文字列では、カンマで区切られた任意の数の単語を含めることができます。各単語をArrayListに追加したかったのです。例えば:

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

回答:


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>()使用方法によっては冗長になる場合があります。(あなたの例のように;)
ピーター・ローリー、2011

1
へへ、ええ、+ 1 :-)それは実際にはsplit彼の後でもあるかもしれません:P
aioobe

彼はArrays.toString()それを印刷するために使用する必要がありますが、そうです。
Peter Lawrey、2009

新しいArrayList <String>()を使用すると、返されたリストをその中に含む新しいリストが作成されます。Arrays.asList(a)はListオブジェクトを返すため、新しいArrayListを呼び出さないでください。不要な動作が発生します。
クロッカー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
ブラケットをトリムする必要がある場合は、次のようにして1つのステップで行うことができます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()));ですか? 文字列配列の最初の文字列を取得し、その文字列をcharArrayに変換し、そのcharArrayをList <Character>に変換しようとしています
sofs1

これは、ArraysクラスのasListメソッドがObject配列のみを受け取り、プリミティブ配列をとらないためです。char []をCharacter []配列に変換すると機能します。
アンディ

public static Character [] boxToCharacter(char [] charArray){Character [] newArray = new Character [charArray.length]; int i = 0; for(char value:charArray){newArray [i ++] = Character.valueOf(value); } return newArray; }
アンディ

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. Shinde

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が必要かどうかを自問する必要があります。非常に多くの場合、追加の基準に基づいてリストをフィルタリングします。この基準には、ストリームが最適です。セットが必要な場合があります。あなたは、任意の上で動作する方法、によって、別の正規表現などのJava 8は、この非常に便利な拡張機能を提供する手段によってそれらをフィルタリングすることもできますCharSequencehttps://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(Character 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());
     }

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.