コンマ区切りの文字列を何らかのコンテナー(配列、リスト、ベクトルなど)に変換するための組み込みメソッドはありますか?それともカスタムコードを書く必要がありますか?
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = //method that converts above string into list??
コンマ区切りの文字列をリストに変換
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>
を使用しなければなりません。
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つの選択肢です)。
2つのステップ
String [] items = commaSeparated.split(",");
List<String> container = Arrays.asList(items);
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
- >コンマ
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はあなたの操作を次々にパイプライン処理することを可能にすることによって本当に強力です。
完全性のために、あなたは知っています。
これには組み込みメソッドはありませんが、これには単にsplit()メソッドを使用できます。
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items =
new ArrayList<String>(Arrays.asList(commaSeparated.split(",")));
List<String> items= Stream.of(commaSeparated.split(","))
.map(String::trim)
.collect(toList());
List<String> items = Arrays.asList(commaSeparated.split(","));
それはあなたのために働くはずです。
asListとsplitを組み合わせることができます
Arrays.asList(CommaSeparated.split("\\s*,\\s*"))
このコードは役立ちます、
String myStr = "item1,item2,item3";
List myList = Arrays.asList(myStr.split(","));
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]
Collections
を使った例です。
import Java.util.Collections;
...
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = new ArrayList<>();
Collections.addAll(items, commaSeparated.split("\\s*,\\s*"));
...
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());
最初にString.split(",")
を使用してそれらを分割し、次にArrays.asList(array)
を使用して返された文字列array
をArrayList
に変換することができます。
Groovyでは、tokenize(Character Token)メソッドを使うことができます。
list = str.tokenize(',')
私は通常リストにプリコンパイルされたパターンを使います。また、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();
List commaseperated = new ArrayList();
String mylist = "item1 , item2 , item3";
mylist = Arrays.asList(myStr.trim().split(" , "));
// enter code here
List<String> items = Arrays.asList(s.split("[,\\s]+"));
Splitterクラスを使用しても同じ結果が得られます。
var list = Splitter.on(",").splitToList(YourStringVariable)
(コトリンで書かれた)
あなたは次のようにそれをすることができます。
これにより、空白が削除され、空白を気にする必要がない場合はカンマで区切られます。
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);