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

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

用逗号分隔这个字符串的最佳方法是什么,这样每个单词都可以成为数组列表的一个元素?

例如

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.

当前回答

为了完整起见,使用Guava库,您可以这样做:split .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]

split .split()返回一个Iterable,所以如果你需要一个List,就像上面那样把它包装在Lists.newArrayList()中。否则就使用Iterable,例如:

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

请注意trimResults()是如何处理所有修剪需求的,而不必像String.split()那样为角落的情况调整正则表达式。

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

其他回答

在构建。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);
    }

享受:)

一个小小的改进:上述解决方案不会删除实际字符串中的前导或尾随空格。在调用split之前最好调用trim。 与此相反,

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

use

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

在Kotlin

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

where stringArray是列表<字符串>和commasString是字符串与逗号和空格

用这个:

        List<String> splitString = (List<String>) Arrays.asList(jobtype.split(","));

你可以这样做:

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

基本上,.split()方法将根据您传递的分隔符(在本例中)分割字符串,并返回一个字符串数组。

但是,您似乎是在寻找字符串列表而不是数组,因此必须使用Arrays.asList()实用程序将数组转换为列表。仅供参考,你也可以这样做:

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

但是针对接口而不是实际的具体实现进行编程通常是更好的实践,因此我推荐第一个选项。