如何将逗号分隔的string转换为ArrayList?

在Java中有什么内置的方法,允许我们将逗号分隔string转换为一些容器(例如数组,列表或vector)? 或者我需要为此编写自定义代码?

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

将逗号分隔的string转换为列表

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

上面的代码将string分割为一个定义为: zero or more whitespace, a literal comma, zero or more whitespace ,将单词放入列表中,并折叠单词和逗号之间的空格。


请注意,这仅仅返回一个数组的封装:你不能例如.remove()从结果List 。 对于一个实际的ArrayList你必须进一步使用new ArrayList<String>

Arrays.asList返回一个由数组支持的固定大小的List 。 如果你想要一个正常的可变java.util.ArrayList你需要这样做:

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

或者,使用番石榴 :

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

使用分隔符为分隔string提供了更多的灵活性,例如,可以跳过结果中的空string并修剪结果。 它也比String.split具有更less的奇怪行为,也不需要用正则expression式来分割(这只是一个选项)。

两个步骤:

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

这里是另一个将CSV转换为ArrayList的方法:

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

打印你

– >string
– >使用
– >逗号

没有内置的方法,但是你可以简单地在这里使用split()方法。

 String commaSeparated = "item1 , item2 , item3"; ArrayList<String> items = new ArrayList<String>(Arrays.asList(commaSeparated.split(","))); 
 List<String> items = Arrays.asList(commaSeparated.split(",")); 

这应该适合你。

你可以结合asList和split

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

如果一个List是OP所说的最终目标,那么已经接受的答案仍然是最短和最好的。 不过,我想为您提供使用Java 8 Streams的替代scheme,如果它是进一步处理的pipe道的一部分,将会给您带来更多的好处。

通过将.split函数(一个本地数组)的结果封装到一个stream中,然后转换成一个列表。

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

或者使用RegExparsingapi:

 List<String> list = Pattern.compile(",") .splitAsStream("a,b,c") .collect(Collectors.toList()); 

通过它们自己,这些代码示例似乎并没有增加很多(除了更多的input),但是如果你打算做更多的事情,就像这个把String转换成Long List列表的例子一样,streamAPI实际上是强大的,允许一个接一个地pipe理你的操作。

为了,你知道,完整性。

一个使用Collections的例子。

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

这下面的代码可能会帮助你,

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

您可以先使用String.split(",")分割它们,然后使用Arrays.asList(array)将返回的String array转换为ArrayList

在groovy中,你可以使用tokenize(Character Token)方法:

 list = str.tokenize(',') 
 List commaseperated = new ArrayList(); String mylist = "item1 , item2 , item3"; mylist = Arrays.asList(myStr.trim().split(" , ")); // enter code here 

我通常使用预编译模式的列表。 而且这也更普遍一些,因为它可以考虑遵循一些listToStringexpression式的括号。

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

您可以使用Guava来分割string,并将其转换为ArrayList。 这也适用于一个空string,并返回一个空的列表。

 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] 

string – >集合转换:(String – > String [] – > Collection)

 // java version 8 String str = "aa,bb,cc,dd,aa,ss,bb,ee,aa,zz,dd,ff,hh"; // Collection, // Set , List, // HashSet , ArrayList ... // (____________________________) // || || // \/ \/ Collection<String> col = new HashSet<>(Stream.of(str.split(",")).collect(Collectors.toList())); 

集合 – >string[]转换:

 String[] se = col.toArray(new String[col.size()]); 

string – >string[]转换:

 String[] strArr = str.split(","); 

collections – >collections品

 List<String> list = new LinkedList<>(col); 
 List<String> items = Arrays.asList(s.split("[,\\s]+")); 

Java 8中使用stream解决这个问题有很多方法,但是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()); 
 ArrayList<HashMap<String, String>> mListmain = new ArrayList<HashMap<String, String>>(); String marray[]= mListmain.split(","); 

将Collection转换为Java 8中用逗号分隔的string

listOfString对象包含[“A”,“B”,“C”,“D”] elements-

 listOfString.stream().map(ele->"'"+ele+"'").collect(Collectors.joining(",")) 

输出是: – “A”,“B”,“C”,“D”

并将string数组转换为Java 8中的列表

  String string[] ={"A","B","C","D"}; List<String> listOfString = Stream.of(string).collect(Collectors.toList()); 

你可以从Apache的lib的StringUtils。

 StringUtils.join(yourStirng, ',');