229

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

"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.
4

16 回答 16

381

你可以这样做:

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

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

但是,您似乎在寻找字符串列表而不是数组,因此必须使用该Arrays.asList()实用程序将数组转换为列表。仅供参考,您还可以执行以下操作:

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

但通常更好的做法是编程到接口而不是实际的具体实现,所以我推荐第一个选项。

于 2012-05-17T07:45:12.960 回答
168

好吧,你想分裂,对吧?

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

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

如果您想另外摆脱项目周围的空格:

String[] animalsArray = animals.split("\\s*,\\s*");
于 2012-05-17T07:45:25.110 回答
34

您可以拆分它并创建一个数组,然后像数组一样访问:

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

您可以使用其索引访问它

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

或使用循环

for(String name : namesList){
    System.out.println(name);
}
于 2016-01-31T08:37:13.177 回答
19

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

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

利用

 String[] animalsArray = animals.trim().split("\\s*,\\s*");
于 2013-12-11T12:17:53.583 回答
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*");
于 2015-04-30T09:21:55.870 回答
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 用户指南javadocs中的拆分器文档。

于 2015-09-02T20:40:28.883 回答
2

可以试试这个对我有用

 sg = sg.replaceAll(", $", "");

要不然

if (sg.endsWith(",")) {
                    sg = sg.substring(0, sg.length() - 1);
                }
于 2017-03-14T13:43:22.227 回答
2

在 build.gradle 添加 Guava

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

请享用 :)

于 2019-01-21T11:43:38.643 回答
1

简单快捷的解决方案:-

字符串 str="测试 1 , 测试 2 , 测试 3";

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

输出=["测试 1","测试 2","测试 3"]

它适用于所有情况。

稍后谢谢我:-)

于 2022-01-07T15:18:14.503 回答
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;
于 2017-02-20T21:36:54.603 回答
0

删除所有空格并创建一个固定大小不可变的列表(请参阅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对Removing whitespace from strings in Java 的回答

于 2016-09-09T19:56:38.730 回答
0

“老派”(JDK1.0)java.util Class StringTokenizer

StringTokenizer ( String str, String delim)

import java.util.*;

public class Tokenizer {
        public static void main(String[] args) {
                String str = "dog, cat, bear, elephant, ..., giraffe";
                StringTokenizer tokenizer = new StringTokenizer(str, ",");

                List<String> strings = new ArrayList<String>();

                while (tokenizer.hasMoreTokens()) {
                        // if need to trim spaces .trim() or use delim like ", "
                        String token = tokenizer.nextToken().trim();
                        strings.add(token);
                }
                // test output
                strings.forEach(System.out::println);
        }
}

注意: StringTokenizer是一个遗留类,出于兼容性原因保留,但不鼓励在新代码中使用它。建议任何寻求此功能的人改用String的split方法或java.util.regex包。

例子:

import java.util.regex.*;
...
// Recommended method<?>
Pattern commaPattern = Pattern.compile("\\s*,\\s*");
String[] words = commaPattern.split(str);
List<String> wordList = new ArrayList<String>(Arrays.asList(words));

// test output
wordList.forEach(System.out::println);
...
于 2021-09-17T21:39:21.743 回答
0

用这个 :

        List<String> splitString = (List<String>) Arrays.asList(jobtype.split(","));
于 2018-08-30T11:53:33.067 回答
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);
 }
}
于 2020-06-12T07:59:00.227 回答
0

在科特林,

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

where stringArrayisList<String>commasStringisString带逗号和空格

于 2018-09-25T05:49:33.690 回答
-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
于 2015-05-16T00:01:16.457 回答