如何分割逗号分隔的字符串?


202

我有一个长度未知的字符串,看起来像这样

"dog, cat, bear, elephant, ..., giraffe"

将这个字符串用逗号分隔的最佳方法是什么,以便每个单词都可以成为ArrayList的元素?

例如

List<String> strings = new ArrayList<Strings>();
// Add the data here so strings.get(0) would be equal to "dog",
// strings.get(1) would be equal to "cat" and so forth.

1
使用方法split(“ spliting char”)可以拆分字符串nad方法将创建包含拆分单词的字符串数组。
西蒙·多罗索克

Answers:


342

您可以这样做:

String str = "...";
List<String> elephantList = Arrays.asList(str.split(","));

基本上,该.split()方法将根据您正在传递的定界符(在这种情况下)分割字符串,并将返回字符串数组。

但是,您似乎位于字符串列表而不是数组之后,因此必须使用该Arrays.asList()实用程序将数组转换为列表。就像供您参考一样,您也可以这样做:

String str = "...";
ArrayList<String> elephantList = new ArrayList<>(Arrays.asList(str.split(","));

但是通常最好是对接口进行编程,而不是对实际的具体实现进行编程,因此我建议使用第一种选择。


9
请记住,这不会修剪值,因此strings.get(1)将是“ cat”而不是“ cat”
Alb 2013年

45
str.split接受正则表达式,因此您可以使用str.split(",[ ]*");它来删除逗号和逗号后的空格。
2013年

4
逗号分隔文件(csv)可能在引号中带有逗号,这意味着它不是分隔符。在这种情况下,拆分将不起作用。
史蒂文·特里格

2
第二个选项要求强制转换为ArrayList<String>
C_B 2014年

3
如果您需要保留空条目(例如,为了保持一致的数组长度),请按照stackoverflow.com/questions/14602062/…
Fast Engy

157

好吧,你想分裂吧?

String animals = "dog, cat, bear, elephant, giraffe";

String[] animalsArray = animals.split(",");

如果您还希望消除项目周围的空格:

String[] animalsArray = animals.split("\\s*,\\s*");

是的,这是解决方案的一部分。OP似乎在字符串列表之后,而不是数组之后。
npinti 2012年

@npinti:是的,给您+1,您的速度更快,我不想复制您的Arrays.asList()习惯用法。
Tomasz Nurkiewicz'5

1
我一直思考了10个小时,然后搜寻了SO。不知道.split()很容易
DeathRs

如果您想将结果拆分项存储在集合中而不是数组中怎么办?
Moses Kirathe

29

您可以将其拆分成一个数组,然后像数组一样进行访问

String names = "prappo,prince";
String[] namesList = names.split(",");

您可以像访问

String name1 = namesList [0];
String name2 = namesList [1];

或使用循环

for(String name : namesList){
System.out.println(name);
}

希望对您有帮助。


18

一个小改进:以上解决方案不会删除实际String中的前导或尾随空格。最好在调用split之前先调用trim。代替这个

 String[] animalsArray = animals.split("\\s*,\\s*");

 String[] animalsArray = animals.trim().split("\\s*,\\s*");

1
对于我们的第二行,如果我们使用trim(),那么我们不需要空间分割,就像("\\s*,\\s*")使用(",");它将产生相同的结果一样。
向导2015年

5
我不确定@WIZARD,因为trim只删除字符串的左右空间,而不能删除其中的空间。所以trim(" string, with , space ")会的"string, with , space"
Thomas Leduc

@ThomasLeduc如果字符串是这样的,"dog, cat, bear, elephant, giraffe"那么就不需要了trim(),在您的情况下,如果使用trim()则输出就 "string,with,space"不是这个了"string, with , space"
WIZARD 2015年

trim()将删除字符串的所有空间,而不仅仅是字符串的左右空间
向导

5
你测试了吗?因为我刚刚写了一个程序java,字符串 " string, with , space ".trim()return "string, with , space"。就像javadoc所说的那样:返回字符串的副本,省略前导和尾随空格。您错了,@ user872858是正确的。
Thomas Leduc

3

首先,您可以像这样拆分名称

String animals = "dog, cat, bear, elephant,giraffe";

String animals_list[] = animals.split(",");

访问您的动物

String animal1 = animals_list[0];
String animal2 = animals_list[1];
String animal3 = animals_list[2];
String animal4 = animals_list[3];

而且您还想删除动物名称周围的空格和逗号

String animals_list[] = animals.split("\\s*,\\s*");

3

为了完整起见,使用Guava库,您可以执行以下操作: Splitter.on(",").split(“dog,cat,fox”)

另一个例子:

String animals = "dog,cat, bear,elephant , giraffe ,  zebra  ,walrus";
List<String> l = Lists.newArrayList(Splitter.on(",").trimResults().split(animals));
// -> [dog, cat, bear, elephant, giraffe, zebra, walrus]

Splitter.split()返回一个Iterable,所以如果您需要一个List,则将其包装在Lists.newArrayList()上面。否则,只需使用Iterable,例如:

for (String animal : Splitter.on(",").trimResults().split(animals)) {
    // ...
}

请注意如何trimResults()处理所有修剪需求,而不必针对极端情况调整正则表达式,例如String.split()

如果您的项目已经使用了Guava,那么这应该是您的首选解决方案。有关更多配置选项,请参见《Guava用户指南》中的 Splitter文档或javadocs



1

在build.gradle中添加番石榴

    compile group: 'com.google.guava', name: 'guava', version: '27.0-jre'

然后

    public static List<String> splitByComma(String str) {
    Iterable<String> split = Splitter.on(",")
            .omitEmptyStrings()
            .trimResults()
            .split(str);
    return Lists.newArrayList(split);
    }

    public static String joinWithComma(Set<String> words) {
        return Joiner.on(", ").skipNulls().join(words);
    }

请享用 :)


0

删除所有空白并创建固定大小不可变的 List(请参阅asList API文档

final String str = "dog, cat, bear, elephant, ..., giraffe";
List<String> list = Arrays.asList(str.replaceAll("\\s", "").split(","));
// result: [dog, cat, bear, elephant, ..., giraffe]

也可以使用,replaceAll(\\s+", "")但是最大效率取决于用例。(见@GurselKoca 回答Java中从字符串中删除空格


0

您可以使用如下形式:

String animals = "dog, cat, bear, elephant, giraffe";

List<String> animalList = Arrays.asList(animals.split(","));

另外,您将包括这些库:

import java.util.ArrayList;
import java.util.Arrays; 
import java.util.List;


0

在科特林,

val stringArray = commasString.replace(", ", ",").split(",")

这里stringArrayList<String>commasStringString用逗号和空格


0

这是一种用逗号分割字符串的简单方法,

import java.util.*;

public class SeparatedByComma{
public static void main(String []args){
     String listOfStates = "Hasalak, Mahiyanganaya, Dambarawa, Colombo";
     List<String> stateList = Arrays.asList(listOfStates.split("\\,"));
     System.out.println(stateList);
 }
}

我用于JDK的这段代码。并且如果您需要打印数组。使用System.out.println
Sandun Susantha

-1

有一个称为的函数replaceAll(),可以通过将所有空格替换为所需的空格来删除所有空格。举个例子

String str="  15. 9 4;16.0 1"
String firstAndSecond[]=str.replaceAll("\\s","").split(";");
System.out.println("First:"+firstAndSecond[0]+", Second:"+firstAndSecond[1]);

会给你:

First:15.94, Second:16.01
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.