1. 概述

在本篇文章中,我们将介绍如何将一个以逗号分隔的 String 转换为字符串列表(List<String>),以及如何将一个由数字组成的逗号分隔字符串转换为整数列表(List<Integer>)。

2. 依赖项

部分方法需要使用 Apache Commons Lang 3Guava 库。因此我们需要将它们添加到项目的 pom.xml 文件中:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.14.0</version>
</dependency>
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

3. 示例数据定义

首先我们定义两个示例字符串:

  • countries: 以逗号分隔的国家名
  • ranks: 以逗号分隔的数字字符串
String countries = "Russia,Germany,England,France,Italy";
String ranks = "1,2,3,4,5,6,7";

最终我们会将这两个字符串分别转换为如下两个列表:

List<String> convertedCountriesList;
List<Integer> convertedRankList;

预期结果如下:

List<String> expectedCountriesList = Arrays.asList("Russia", "Germany", "England", "France", "Italy");
List<Integer> expectedRanksList = Arrays.asList(1, 2, 3, 4, 5, 6, 7);

4. 使用核心 Java 实现

✅ 字符串转字符串列表

最简单的方式是使用 String.split() 方法配合 Arrays.asList()

List<String> convertedCountriesList = Arrays.asList(countries.split(",", -1));

⚠️ 注意:这里传入了 -1 作为 limit 参数,确保不会忽略空字符串。

✅ 数字字符串转整数列表

我们可以先分割字符串,然后手动遍历并转换每个元素:

String[] convertedRankArray = ranks.split(",");
List<Integer> convertedRankList = new ArrayList<Integer>();
for (String number : convertedRankArray) {
    convertedRankList.add(Integer.parseInt(number.trim()));
}

📌 小结:

  • 使用 split(",", -1) 可以保留所有的空字符串;
  • 不带 limit 或者 limit=0split 会忽略末尾的空字符串。

5. 使用 Java Stream API

Stream 提供更优雅的链式操作方式。

✅ 字符串转字符串列表

List<String> convertedCountriesList = Stream.of(countries.split(",", -1))
  .collect(Collectors.toList());

✅ 数字字符串转整数列表

List<Integer> convertedRankList = Stream.of(ranks.split(","))
  .map(String::trim)
  .map(Integer::parseInt)
  .collect(Collectors.toList());

📌 这种方式的优势在于可读性强,支持函数式编程风格。

6. 使用 Apache Commons Lang

✅ 字符串转字符串列表

使用 StringUtils.splitPreserveAllTokens 可以保留所有 token(包括空字符串):

List<String> convertedCountriesList = Arrays.asList(StringUtils.splitPreserveAllTokens(countries, ","));

✅ 数字字符串转整数列表

String[] convertedRankArray = StringUtils.split(ranks, ",");
List<Integer> convertedRankList = new ArrayList<Integer>();
for (String number : convertedRankArray) {
    convertedRankList.add(Integer.parseInt(number.trim()));
}

📌 对比说明:

  • splitPreserveAllTokens: 保留空字符串 ✅
  • split: 忽略空字符串 ❌

7. 使用 Guava

✅ 字符串转字符串列表

Guava 提供了 Splitter 类,功能强大且灵活:

List<String> convertedCountriesList = Splitter.on(",")
  .trimResults()
  .splitToList(countries);

✅ 数字字符串转整数列表

可以结合 Lists.transform 实现类型转换:

List<Integer> convertedRankList = Lists.transform(Splitter.on(",")
  .trimResults()
  .splitToList(ranks), new Function<String, Integer>() {
      @Override
      public Integer apply(String input) {
          return Integer.parseInt(input.trim());
      }
  });

📌 Guava 的优势在于 API 设计清晰,适合复杂场景处理。

8. 总结

本文介绍了多种将逗号分隔字符串转换为 List 的方法,适用于不同场景:

方式 优点 缺点
原生 Java 无额外依赖,简单直接 写法略繁琐
Java Stream 函数式风格,代码简洁 需要 JDK8+
Apache Commons 工具丰富,容错性好 需引入第三方库
Guava 功能强大,链式调用 同样需引入第三方库

当然,这些方法也可以扩展用于其他分隔符或基础数据类型的转换。

如需查看完整代码,请访问:GitHub 项目地址


原始标题:Convert a Comma Separated String to a List | Baeldung