如何将逗号分隔的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式来分割(这只是一个选项)。
两个步骤:
-
String [] items = commaSeparated.split(",");
-
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, ',');