Jam*_*ame 513 java string collections split
Java中是否有任何内置方法允许我们将逗号分隔的String转换为某个容器(例如数组,List或Vector)?或者我需要为此编写自定义代码?
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = //method that converts above string into list??
Run Code Online (Sandbox Code Playgroud)
Ale*_*exR 964
将逗号分隔的String转换为List
List<String> items = Arrays.asList(str.split("\\s*,\\s*"));
Run Code Online (Sandbox Code Playgroud)
上面的代码将字符串拆分为定义为:的分隔符zero or more whitespace, a literal comma, zero or more whitespace
,它将单词放入列表中并折叠单词和逗号之间的任何空格.
请注意,这只返回数组上的包装器:例如,不能.remove()
从结果中返回List
.对于实际,ArrayList
您必须进一步使用new ArrayList<String>
.
Col*_*inD 190
Arrays.asList
返回List
由数组支持的固定大小.如果你想要一个正常的可变,java.util.ArrayList
你需要这样做:
List<String> list = new ArrayList<String>(Arrays.asList(string.split(" , ")));
Run Code Online (Sandbox Code Playgroud)
或者,使用番石榴:
List<String> list = Lists.newArrayList(Splitter.on(" , ").split(string));
Run Code Online (Sandbox Code Playgroud)
使用a Splitter
可以更灵活地分割字符串,并使您能够在结果中跳过空字符串并修剪结果.它也没有那么奇怪的行为String.split
,也没有要求你用正则表达式分割(这只是一个选项).
duf*_*ymo 69
两个步骤:
String [] items = commaSeparated.split("\\s*,\\s*");
List<String> container = Arrays.asList(items);
Arv*_*vp6 22
这是另一个将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));
}
Run Code Online (Sandbox Code Playgroud)
打印你
- > string
- > with
- >逗号
YoY*_*oYo 20
如果a List
是OP所说的最终目标,那么已经接受的答案仍然是最短和最好的.但是,我想使用Java 8 Streams提供替代方案,如果它是进一步处理的管道的一部分,将为您带来更多好处.
通过将.split函数(本机数组)的结果包装到流中,然后转换为列表.
List<String> list =
Stream.of("a,b,c".split(","))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
如果将结果存储为ArrayList
OP中的标题非常重要,则可以使用其他Collector
方法:
ArrayList<String> list =
Stream.of("a,b,c".split(","))
.collect(Collectors.toCollection(ArrayList<String>::new));
Run Code Online (Sandbox Code Playgroud)
或者使用RegEx解析api:
ArrayList<String> list =
Pattern.compile(",")
.splitAsStream("a,b,c")
.collect(Collectors.toCollection(ArrayList<String>::new));
Run Code Online (Sandbox Code Playgroud)
请注意,您仍然可以考虑将list
变量键入List<String>
而不是ArrayList<String>
.通用接口List
看起来仍然非常类似于ArrayList
实现.
这些代码示例本身似乎没有增加太多(除了更多的输入),但是如果你打算做更多的事情,比如将String转换为Longs列表的答案,那么流API就非常强大了一个接一个地管理你的操作.
为了,你知道,完整性.
小智 15
没有内置的方法,但你可以简单地使用split()方法.
String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items =
new ArrayList<String>(Arrays.asList(commaSeparated.split(",")));
Run Code Online (Sandbox Code Playgroud)
Man*_*anu 15
List<String> items= Stream.of(commaSeparated.split(","))
.map(String::trim)
.collect(toList());
Run Code Online (Sandbox Code Playgroud)
Jas*_*ler 13
List<String> items = Arrays.asList(commaSeparated.split(","));
Run Code Online (Sandbox Code Playgroud)
这对你有用.
cor*_*iKa 10
你可以结合asList和split
Arrays.asList(CommaSeparated.split("\\s*,\\s*"))
Run Code Online (Sandbox Code Playgroud)
这段代码会有所帮助,
String myStr = "item1,item2,item3";
List myList = Arrays.asList(myStr.split(","));
Run Code Online (Sandbox Code Playgroud)
小智 6
Java 9 引入了 List.of():
String commaSeparated = "item1 , item2 , item3";
List<String> items = List.of(commaSeparated.split(" , "));
Run Code Online (Sandbox Code Playgroud)
您可以使用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);
Run Code Online (Sandbox Code Playgroud)
输出以下内容:
[item1, item2, item3]
[item1, item2, item3, another item]
Run Code Online (Sandbox Code Playgroud)
有很多方法可以使用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());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
866085 次 |
最近记录: |