it-swarm.cn

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

Java中是否有任何内置方法允许我们将逗号分隔的String转换为某个容器(例如array,List或Vector)?或者我需要为此编写自定义代码?

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

将逗号分隔的String转换为List

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

上面的代码将字符串拆分为定义为:zero or more whitespace, a literal comma, zero or more whitespace的分隔符,它将单词放入列表中并折叠单词和逗号之间的任何空格。


请注意,这只返回一个数组的包装器:你 _不能_ 例如来自List.remove()。对于实际的ArrayList,您必须进一步使用new ArrayList<String>

914
AlexR

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

使用Splitter可以更灵活地分割字符串,并使您能够跳过结果中的空字符串并修剪结果。它也比String.split具有更少的奇怪行为,并且不需要你通过正则表达式进行拆分(这只是一个选项)。

178
ColinD

两个步骤:

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

这是另一个将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));
}

打印你

- >字符串
- >与
- >逗号

22
Arvindvp6

如果List是OP所说的最终目标,那么已经接受的答案仍然是最短和最好的。但是,我想使用 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实现相似。

这些代码示例本身似乎没有增加太多(除了更多的输入),但是如果你打算做更多的事情,比如 这个将String转换为Longs列表的答案 例证,流API是通过允许一个接一个地管理您的操作真的很强大。

为了,你知道,完整性。

19
YoYo

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

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

这对你有用。

13
Jason Wheeler

你可以结合asList和split

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

这段代码会有所帮助,

String myStr = "item1,item2,item3";
List myList = Arrays.asList(myStr.split(","));
6
Srinivasan.S

您可以使用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]
5
Brad Parks

使用Collections的示例。

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

有很多种方法可以使用 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());
3
i_am_zero

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

2
Saket

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

list = str.tokenize(',')
1
sivareddy963

我通常使用预编译模式作为列表。而且这更加普遍,因为它可以考虑一些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();
1
Jan Stanicek
List commaseperated = new ArrayList();
String mylist = "item1 , item2 , item3";
mylist = Arrays.asList(myStr.trim().split(" , "));

// enter code here
1
deepu kumar singh
List<String> items = Arrays.asList(s.split("[,\\s]+"));
0
Nenad Bulatovic

使用Splitter类可以获得相同的结果。

var list = Splitter.on(",").splitToList(YourStringVariable)

(用kotlin写的)

0
anoopbryan2

你可以这样做。

这将删除空格并用逗号分隔,您无需担心空格。

    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);
0
Dulith De Costa