1. 概述
在本篇文章中,我们将介绍如何将一个以逗号分隔的 String
转换为字符串列表(List<String>
),以及如何将一个由数字组成的逗号分隔字符串转换为整数列表(List<Integer>
)。
2. 依赖项
部分方法需要使用 Apache Commons Lang 3 和 Guava 库。因此我们需要将它们添加到项目的 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=0
的split
会忽略末尾的空字符串。
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 项目地址