Java中是否有任何内置方法允许我们将逗号分隔的String转换为某个容器(例如array,List或Vector)?或者我需要为此编写自定义代码?
String commaSeparated = "item1 , item2 , item3"; ArrayList<String> items = //method that converts above string into list??
有很多种方法可以使用 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());
List<String> items = Arrays.asList(s.split("[,\\s]+"));
你可以这样做 .
这将删除空格并用逗号分隔,您无需担心空格 .
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);
使用Splitter类可以获得相同的结果 .
var list = Splitter.on(",").splitToList(YourStringVariable)
(用kotlin写的)
Convert comma separated String to List
List<String> items = Arrays.asList(str.split("\\s*,\\s*"));
上面的代码将字符串拆分为定义为: zero or more whitespace, a literal comma, zero or more whitespace 的分隔符,它将单词放入列表中并折叠单词和逗号之间的任何空格 .
zero or more whitespace, a literal comma, zero or more whitespace
请注意,这只返回一个数组的包装器:你 CANNOT 例如 .remove() 来自结果 List . 对于实际 ArrayList ,您必须进一步使用 new ArrayList<String> .
.remove()
List
ArrayList
new ArrayList<String>
Arrays.asList 返回由数组支持的固定大小的 List . 如果你想要一个正常的可变 java.util.ArrayList ,你需要这样做:
Arrays.asList
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 具有更少的怪异行为,并且不需要你通过正则表达式进行拆分(这只是一个选项) .
Splitter
String.split
两个步骤:
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 - > with - >逗号
没有内置的方法,但你可以简单地使用split()方法 .
String commaSeparated = "item1 , item2 , item3"; ArrayList<String> items = new ArrayList<String>(Arrays.asList(commaSeparated.split(",")));
List<String> items = Arrays.asList(commaSeparated.split(","));
这对你有用 .
如果一个 List 是OP所说的最终目标,那么已经接受的答案仍然是最短和最好的 . 但是,我想使用Java 8 Streams提供替代方案,如果它是进一步处理的管道的一部分,将为您带来更多好处 .
通过将.split函数(本机数组)的结果包装到流中,然后转换为列表 .
List<String> list = Stream.of("a,b,c".split(",")) .collect(Collectors.toList());
如果根据OP的 Headers 将结果存储为 ArrayList 很重要,则可以使用不同的 Collector 方法:
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 实现相似 .
list
List<String>
ArrayList<String>
这些代码示例本身似乎并没有增加太多(除了更多的输入),但是如果你打算做更多的事情,比如this answer on converting a String to a List of Longs例证,那么通过允许一个接一个地管理你的操作,流API真的很强大 .
为了,你知道,完整性 .
List<String> items= Stream.of(commaSeparated.split(",")) .map(String::trim) .collect(toList());
你可以结合asList和split
Arrays.asList(CommaSeparated.split("\\s*,\\s*"))
使用 Collections 的示例 .
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(" , "));
您可以使用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]
您可以先使用 String.split(",") 拆分它们,然后使用 Arrays.asList(array) 将返回的字符串 array 转换为 ArrayList
String.split(",")
Arrays.asList(array)
array
在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
我通常使用预编译模式作为列表 . 而且这更加普遍,因为它可以考虑一些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();
String -> Collection 转换:(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()));
Collection -> String[] 转换:
String[] se = col.toArray(new String[col.size()]);
String -> String[] 转换:
String[] strArr = str.split(",");
和 Collection -> Collection :
List<String> list = new LinkedList<>(col);
将集合转换为字符串,在 Java 8 中以逗号分隔
listOfString对象包含[“A”,“B”,“C”,“D”]元素 -
listOfString.stream().map(ele->"'"+ele+"'").collect(Collectors.joining(","))
Output is :- 'A','B','C','D'
And Convert Strings Array to List in Java 8
String string[] ={"A","B","C","D"}; List<String> listOfString = Stream.of(string).collect(Collectors.toList());
ArrayList<HashMap<String, String>> mListmain = new ArrayList<HashMap<String, String>>(); String marray[]= mListmain.split(",");
23 回答
有很多种方法可以使用 Java 8 中的流来解决这个问题,但是IMO下面的一个内容是直截了当的:
你可以这样做 .
这将删除空格并用逗号分隔,您无需担心空格 .
使用Splitter类可以获得相同的结果 .
(用kotlin写的)
Convert comma separated String to List
上面的代码将字符串拆分为定义为:
zero or more whitespace, a literal comma, zero or more whitespace
的分隔符,它将单词放入列表中并折叠单词和逗号之间的任何空格 .请注意,这只返回一个数组的包装器:你 CANNOT 例如
.remove()
来自结果List
. 对于实际ArrayList
,您必须进一步使用new ArrayList<String>
.Arrays.asList
返回由数组支持的固定大小的List
. 如果你想要一个正常的可变java.util.ArrayList
,你需要这样做:或者,使用Guava:
使用
Splitter
可以更灵活地分割字符串,并使您能够跳过结果中的空字符串并修剪结果 . 它也比String.split
具有更少的怪异行为,并且不需要你通过正则表达式进行拆分(这只是一个选项) .两个步骤:
String [] items = commaSeparated.split(",");
List<String> container = Arrays.asList(items);
这是另一个将CSV转换为ArrayList的方法:
打印你
没有内置的方法,但你可以简单地使用split()方法 .
这对你有用 .
如果一个
List
是OP所说的最终目标,那么已经接受的答案仍然是最短和最好的 . 但是,我想使用Java 8 Streams提供替代方案,如果它是进一步处理的管道的一部分,将为您带来更多好处 .通过将.split函数(本机数组)的结果包装到流中,然后转换为列表 .
如果根据OP的 Headers 将结果存储为
ArrayList
很重要,则可以使用不同的Collector
方法:或者使用RegEx解析api:
请注意,您仍然可以考虑将
list
变量保留为List<String>
而不是ArrayList<String>
.List
的通用接口看起来仍然与ArrayList
实现相似 .这些代码示例本身似乎并没有增加太多(除了更多的输入),但是如果你打算做更多的事情,比如this answer on converting a String to a List of Longs例证,那么通过允许一个接一个地管理你的操作,流API真的很强大 .
为了,你知道,完整性 .
你可以结合asList和split
使用
Collections
的示例 .以下代码可以帮助您,
您可以使用Guava拆分字符串,并将其转换为ArrayList . 这也适用于空字符串,并返回一个空列表 .
输出以下内容:
您可以先使用
String.split(",")
拆分它们,然后使用Arrays.asList(array)
将返回的字符串array
转换为ArrayList
在groovy中,您可以使用tokenize(Character Token)方法:
我通常使用预编译模式作为列表 . 而且这更加普遍,因为它可以考虑一些listToString表达式之后的括号 .
String -> Collection 转换:(String - > String [] - > Collection)
Collection -> String[] 转换:
String -> String[] 转换:
和 Collection -> Collection :
将集合转换为字符串,在 Java 8 中以逗号分隔
listOfString对象包含[“A”,“B”,“C”,“D”]元素 -
Output is :- 'A','B','C','D'
And Convert Strings Array to List in Java 8