web-dev-qa-db-ja.com

コンマ区切りの文字列をArrayListに変換する方法

コンマ区切りの文字列を何らかのコンテナー(配列、リスト、ベクトルなど)に変換するための組み込みメソッドはありますか?それともカスタムコードを書く必要がありますか?

String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = //method that converts above string into list??
483
Jame

コンマ区切りの文字列をリストに変換

List<String> items = Arrays.asList(str.split("\\s*,\\s*"));

上記のコードは、文字列を次のように定義された区切り文字に分割します。zero or more whitespace, a literal comma, zero or more whitespaceは、単語をリストに入れ、単語とカンマの間の空白を折りたたみます。


これは単に配列のラッパーを返すことに注意してください。you _は_ にすることはできません。例えば、結果のListから.remove()にすることはできません。実際のArrayListには、さらにnew ArrayList<String>を使用しなければなりません。

914
AlexR

Arrays.asListは、配列を基にした固定サイズのListを返します。通常の可変のJava.util.ArrayListが欲しいなら、これをする必要があります:

List<String> list = new ArrayList<String>(Arrays.asList(string.split(" , ")));

または、 Guava を使用します。

List<String> list = Lists.newArrayList(Splitter.on(" , ").split(string));

Splitterを使用すると、文字列を分割する方法の柔軟性が高まり、たとえば、結果の空の文字列をスキップして結果を切り捨てることができます。正規表現で分割する必要がないだけでなく、String.splitよりも奇妙な振る舞いもしません(これはほんの1つの選択肢です)。

178
ColinD

2つのステップ

  1. String [] items = commaSeparated.split(",");
  2. List<String> container = Arrays.asList(items);
63
duffymo

CSVをArrayListに変換するもう1つの方法があります。

String str="string,with,comma";
ArrayList aList= new ArrayList(Arrays.asList(str.split(",")));
for(int i=0;i<aList.size();i++)
{
    System.out.println(" -->"+aList.get(i));
}

あなたを印刷

- >ひも
- > with
- >コンマ

22
Arvindvp6

OPが述べたようにListが最終目標である場合、すでに受け入れられている答えは依然として最短で最善です。しかし、私は Java 8 Streams を使った代替手段を提供したいのですが、それがさらなる処理のためのパイプラインの一部であれば、それはより多くの利益をもたらします。

.split関数(ネイティブ配列)の結果をストリームにラップしてからリストに変換する。

List<String> list =
  Stream.of("a,b,c".split(","))
  .collect(Collectors.toList());

結果がOPのタイトルに従ってArrayListとして格納されることが重要な場合は、別のCollectorメソッドを使用できます。

ArrayList<String> list = 
  Stream.of("a,b,c".split(","))
  .collect(Collectors.toCollection(ArrayList<String>::new));

またはRegEx解析APIを使用して:

ArrayList<String> list = 
  Pattern.compile(",")
  .splitAsStream("a,b,c")
  .collect(Collectors.toCollection(ArrayList<String>::new));

list変数をList<String>ではなくArrayList<String>として入力したままにすることを検討することもできます。 Listの汎用インターフェースは、ArrayListの実装と十分に似ています。

それ自体では、これらのコード例はそれほど多くは追加されないようですが(それ以上の入力は除く)、 文字列をLongのリストへの変換に関するこの回答 APIはあなたの操作を次々にパイプライン処理することを可能にすることによって本当に強力です。

完全性のために、あなたは知っています。

19
YoYo

これには組み込みメソッドはありませんが、これには単にsplit()メソッドを使用できます。

String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = 
new  ArrayList<String>(Arrays.asList(commaSeparated.split(",")));
14
Ishara
List<String> items= Stream.of(commaSeparated.split(","))
     .map(String::trim)
     .collect(toList());
13
Manu
List<String> items = Arrays.asList(commaSeparated.split(","));

それはあなたのために働くはずです。

13
Jason Wheeler

asListとsplitを組み合わせることができます

Arrays.asList(CommaSeparated.split("\\s*,\\s*"))
10
corsiKa

このコードは役立ちます、

String myStr = "item1,item2,item3";
List myList = Arrays.asList(myStr.split(","));
6
Srinivasan.S

Guavaを使って文字列を分割し、それをArrayListに変換することができます。これは空の文字列でも機能し、空のリストを返します。

import com.google.common.base.Splitter;
import com.google.common.collect.Lists;

String commaSeparated = "item1 , item2 , item3";

// Split string into list, trimming each item and removing empty items
ArrayList<String> list = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().splitToList(commaSeparated));
System.out.println(list);

list.add("another item");
System.out.println(list);

以下を出力します。

[item1, item2, item3]
[item1, item2, item3, another item]
5
Brad Parks

Collectionsを使った例です。

import Java.util.Collections;
 ...
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = new ArrayList<>();
Collections.addAll(items, commaSeparated.split("\\s*,\\s*"));
 ...
4
Filippo Lauria

Java 8 でストリームを使ってこれを解決する方法はたくさんありますが、IMOでは次のようなライナーが簡単です。

String  commaSeparated = "item1 , item2 , item3";
List<String> result1 = Arrays.stream(commaSeparated.split(" , "))
                                             .collect(Collectors.toList());
List<String> result2 = Stream.of(commaSeparated.split(" , "))
                                             .collect(Collectors.toList());
3
i_am_zero

最初にString.split(",")を使用してそれらを分割し、次にArrays.asList(array)を使用して返された文字列arrayArrayListに変換することができます。

2
Saket

Groovyでは、tokenize(Character Token)メソッドを使うことができます。

list = str.tokenize(',')
1
sivareddy963

私は通常リストにプリコンパイルされたパターンを使います。また、listToString式の後に続く大括弧を検討できるため、これはもう少し普遍的です。

private static final Pattern listAsString = Pattern.compile("^\\[?([^\\[\\]]*)\\]?$");

private List<String> getList(String value) {
  Matcher matcher = listAsString.matcher((String) value);
  if (matcher.matches()) {
    String[] split = matcher.group(matcher.groupCount()).split("\\s*,\\s*");
    return new ArrayList<>(Arrays.asList(split));
  }
  return Collections.emptyList();
1
Jan Stanicek
List commaseperated = new ArrayList();
String mylist = "item1 , item2 , item3";
mylist = Arrays.asList(myStr.trim().split(" , "));

// enter code here
1
List<String> items = Arrays.asList(s.split("[,\\s]+"));
0
Nenad Bulatovic

Splitterクラスを使用しても同じ結果が得られます。

var list = Splitter.on(",").splitToList(YourStringVariable)

(コトリンで書かれた)

0
anoopbryan2

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

これにより、空白が削除され、空白を気にする必要がない場合はカンマで区切られます。

    String myString= "A, B, C, D";

    //Remove whitespace and split by comma 
    List<String> finalString= Arrays.asList(myString.split("\\s*,\\s*"));

    System.out.println(finalString);
0
Dulith De Costa