如何将逗号分隔的字符串转换为列表?
Java 中是否有任何内置方法允许我们将逗号分隔的字符串转换为某个容器(例如数组、列表或向量)?或者我需要为此编写自定义代码吗?
String commaSeparated = "item1 , item2 , item3";
List<String> items = //method that converts above string into list??
Is there any built-in method in Java which allows us to convert comma separated String to some container (e.g array, List or Vector)? Or do I need to write custom code for that?
String commaSeparated = "item1 , item2 , item3";
List<String> items = //method that converts above string into list??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(28)
将逗号分隔的字符串转换为列表
上面的代码在定义为的分隔符上分割字符串:
零个或多个空格、文字逗号、零个或多个空格
,这将放置单词进入列表并折叠单词和逗号之间的所有空格。请注意,这只是返回一个数组的包装器:您不能,例如从生成的
List
.remove()代码>.对于实际的ArrayList
,您必须进一步使用new ArrayList
。Convert comma separated String to List
The above code splits the string on a delimiter defined as:
zero or more whitespace, a literal comma, zero or more whitespace
which will place the words into the list and collapse any whitespace between the words and commas.Please note that this returns simply a wrapper on an array: you CANNOT for example
.remove()
from the resultingList
. For an actualArrayList
you must further usenew ArrayList<String>
.Arrays.asList
返回由数组支持的固定大小的List
。如果你想要一个普通的可变java.util.ArrayList
,你需要这样做:或者,使用Guava :
使用
Splitter
可以让您更灵活地拆分字符串,并能够跳过结果中的空字符串并修剪结果。它的奇怪行为也比 String.split 少,并且不需要您通过正则表达式进行拆分(这只是一种选择)。Arrays.asList
returns a fixed-sizeList
backed by the array. If you want a normal mutablejava.util.ArrayList
you need to do this:Or, using Guava:
Using a
Splitter
gives you more flexibility in how you split the string and gives you the ability to, for example, skip empty strings in the results and trim results. It also has less weird behavior thanString.split
as well as not requiring you to split by regex (that's just one option).两步:
String [] items = commaSeparated.split("\\s*,\\s*");
List;容器 = Arrays.asList(items);
Two steps:
String [] items = commaSeparated.split("\\s*,\\s*");
List<String> container = Arrays.asList(items);
如果
List
是OP所述的最终目标,那么已经接受的答案仍然是最短和最好的。但是我想使用 Java 8 提供替代方案Streams,如果它是进一步处理管道的一部分,将为您带来更多好处。通过将 .split 函数的结果(本机数组)包装到流中,然后转换为列表。
如果按照 OP 的标题将结果存储为 ArrayList 很重要,您可以使用不同的 Collector 方法:
或者使用 RegEx 解析 api:
请注意,您仍然可以考虑将
list
变量保留为List
类型,而不是ArrayList
。List
的通用接口看起来仍然与ArrayList
实现非常相似。就其本身而言,这些代码示例似乎并没有添加很多内容(除了更多的输入),但如果您打算做更多,例如这个关于将字符串转换为长整型列表的答案 举例说明,流 API 非常强大,允许一个接一个地对您的操作进行管道化。
你知道,为了完整性。
If a
List
is the end-goal as the OP stated, then already accepted answer is still the shortest and the best. However I want to provide alternatives using Java 8 Streams, that will give you more benefit if it is part of a pipeline for further processing.By wrapping the result of the .split function (a native array) into a stream and then converting to a list.
If it is important that the result is stored as an
ArrayList
as per the title from the OP, you can use a differentCollector
method:Or by using the RegEx parsing api:
Note that you could still consider to leave the
list
variable typed asList<String>
instead ofArrayList<String>
. The generic interface forList
still looks plenty of similar enough to theArrayList
implementation.By themselves, these code examples do not seem to add a lot (except more typing), but if you are planning to do more, like this answer on converting a String to a List of Longs exemplifies, the streaming API is really powerful by allowing to pipeline your operations one after the other.
For the sake of, you know, completeness.
这是另一种将 CSV 转换为 ArrayList 的方法:
打印你
Here is another one for converting CSV to ArrayList:
Prints you
那应该对你有用。
That should work for you.
没有内置方法,但您可以简单地使用 split() 方法。
There is no built-in method for this but you can simply use split() method in this.
您可以组合 asList 和 split
you can combine asList and split
这段代码会有所帮助,
This code will help,
您可以使用 Guava 拆分字符串,并将其转换为 ArrayList。这也适用于空字符串,并返回空列表。
输出以下内容:
您还可以在没有 Guava 的情况下使用以下方法:
You can use Guava to split the string, and convert it into an ArrayList. This works with an empty string as well, and returns an empty list.
outputs the following:
You could also use the following approach without Guava:
Java 9 引入了 List.of():
Java 9 introduced List.of():
有很多方法可以使用 Java 8 中的流来解决这个问题,但在我看来,以下一个行是直接的:
There are many ways to solve this using streams in Java 8 but IMO the following one liners are straight forward:
在groovy中,您可以使用 tokenize(Character Token) 方法:
In groovy, you can use tokenize(Character Token) method:
使用
集合
的示例。An example using
Collections
.您可以先使用
String.split(",")
拆分它们,然后使用将返回的 String
array
转换为ArrayList
Arrays.asList(数组)You can first split them using
String.split(",")
, and then convert the returned Stringarray
to anArrayList
usingArrays.asList(array)
使用 Splitter 类可以获得相同的结果。
(用科特林编写)
Same result you can achieve using the Splitter class.
(written in kotlin)
虽然这个问题很旧并且已被多次回答,但没有一个答案能够管理以下所有情况:
""
->空字符串应映射到空列表" a, b , c "
->所有元素都应该被修剪,包括第一个和最后一个元素",,"
->应该删除空元素因此,我使用以下代码(使用 org.apache.commons.lang3.StringUtils,例如 https://mvnrepository.com/artifact/org.apache.commons/commons-lang3/3.11):
使用简单的分割表达式有一个优点:不使用正则表达式,所以性能大概是更高。
commons-lang3
库是轻量级且非常常见的。请注意,该实现假设您没有包含逗号的列表元素(即
"a, 'b,c', d"
将被解析为["a", "'b ", "c'", "d"]
,而不是["a", "b,c", "d"]
)。While this question is old and has been answered multiple times, none of the answers is able to manage the all of the following cases:
""
-> empty string should be mapped to empty list" a, b , c "
-> all elements should be trimmed, including the first and last element",,"
-> empty elements should be removedThus, I'm using the following code (using
org.apache.commons.lang3.StringUtils
, e.g. https://mvnrepository.com/artifact/org.apache.commons/commons-lang3/3.11):Using a simple split expression has an advantage: no regular expression is used, so the performance is probably higher. The
commons-lang3
library is lightweight and very common.Note that the implementation assumes that you don't have list element containing comma (i.e.
"a, 'b,c', d"
will be parsed as["a", "'b", "c'", "d"]
, not to["a", "b,c", "d"]
).在java中,可以这样完成
In java, It can be done like this
我通常使用列表的预编译模式。而且这也稍微更通用,因为它可以考虑一些 listToString 表达式后面的括号。
I usually use precompiled pattern for the list. And also this is slightly more universal since it can consider brackets which follows some of the listToString expressions.
在 Kotlin 中,如果您的字符串列表是这样的,并且您可以使用这行代码将字符串转换为 ArrayList
In Kotlin if your String list like this and you can use for convert string to ArrayList use this line of code
您可以按如下方式进行操作。
这会删除空格并用逗号分隔,您无需担心空格。
You can do it as follows.
This removes white space and split by comma where you do not need to worry about white spaces.
此方法会将字符串转换为数组,并采用两个参数:
然后它返回转换后的数组。
This method will convert your string to an array, taking two parameters:
It then returns the converted array.
以下是利用 Java 8 流的代码的另外两个扩展版本:
Here are two more extended versions of the code that utilize Java 8 streams:
将 Collection 转换为字符串,以 Java 8 中的逗号分隔
listOfString 对象包含 ["A","B","C" ,"D"] 元素 -
输出为 :-
'A'、'B'、'C'、'D'
以及在 Java 8 中将字符串数组转换为列表
convert Collection into string as comma seperated in Java 8
listOfString object contains ["A","B","C" ,"D"] elements-
Output is :-
'A','B','C','D'
And Convert Strings Array to List in Java 8