核心思路
将一个字符串转换成一个列表,通常包含两个核心步骤:

(图片来源网络,侵删)
- 分割:根据一个特定的分隔符(如逗号、空格、分号等)将原始字符串拆分成一个字符串数组。
- 转换:将这个字符串数组转换成你需要的 List 集合(
List<String>)。
下面我们来看具体实现。
使用 String.split() 和 Arrays.asList() (最常用)
这是最直接、最经典的方法,适用于将字符串分割成 List<String>。
步骤:
- 使用
String.split(String regex)方法将字符串分割成字符串数组 (String[])。 - 使用
Arrays.asList(T... a)方法将数组转换成一个固定大小的List。
示例代码:
import java.util.Arrays;
import java.util.List;
public class StringToListExample {
public static void main(String[] args) {
String str = "apple,banana,orange,grape";
// 1. 使用逗号作为分隔符分割字符串
String[] fruitArray = str.split(",");
// 2. 将数组转换为 List
List<String> fruitList = Arrays.asList(fruitArray);
// 打印结果
System.out.println("原始字符串: " + str);
System.out.println("转换后的 List: " + fruitList);
System.out.println("List 的类型: " + fruitList.getClass().getName()); // java.util.Arrays$ArrayList
// 注意:Arrays.asList() 返回的 List 是固定大小的,不能添加或删除元素。
// 下面这行代码会抛出 UnsupportedOperationException 异常
// fruitList.add("pear");
}
}
重要注意事项:
- 不可变性:
Arrays.asList()返回的List是一个固定大小的视图,你不能向其中添加或删除元素,否则会抛出UnsupportedOperationException。 - 分隔符是正则表达式:
split()方法的参数是一个正则表达式,如果你的分隔符是正则表达式中的特殊字符(如[\等),你需要用\进行转义。- 按点 分割:
"a.b.c".split("\\.") - 按竖线 分割:
"a|b|c".split("\\|")
- 按点 分割:
使用 Java 8 Stream API (最现代、最灵活)
如果你使用的是 Java 8 或更高版本,Stream API 提供了更强大、更灵活的方式来处理转换,这种方法不仅可以轻松创建一个可修改的 ArrayList,还能进行更复杂的操作(如过滤、映射)。
步骤:
- 使用
String.split()分割字符串。 - 使用
Arrays.stream()将数组转换为流。 - 使用
collect(Collectors.toList())将流收集到一个新的ArrayList中。
示例代码:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StringToListStreamExample {
public static void main(String[] args) {
String str = "apple,banana,orange,grape";
// 使用 Stream API 转换为可修改的 ArrayList
List<String> fruitList = Arrays.stream(str.split(","))
.collect(Collectors.toList());
System.out.println("原始字符串: " + str);
System.out.println("转换后的 List: " + fruitList);
System.out.println("List 的类型: " + fruitList.getClass().getName()); // java.util.ArrayList
// 这个 List 是可以正常添加和删除元素的
fruitList.add("pear");
System.out.println("添加元素后的 List: " + fruitList);
}
}
优点:
- 灵活性高:可以在
collect()之前链式调用各种 Stream 操作,如filter()、map()、distinct()等。 - 返回可变 List:
Collectors.toList()返回的是一个标准的、可修改的ArrayList,非常方便。
手动循环添加 (最基础)
这种方法不依赖任何高级特性,通过 for 循环手动构建 List,虽然代码稍长,但逻辑非常清晰,适合初学者理解。

(图片来源网络,侵删)
步骤:
- 创建一个空的
ArrayList。 - 使用
String.split()分割字符串。 - 遍历分割后的数组,将每个元素
add到ArrayList中。
示例代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class StringToListManualExample {
public static void main(String[] args) {
String str = "apple,banana,orange,grape";
// 1. 创建一个新的 ArrayList
List<String> fruitList = new ArrayList<>();
// 2. 分割字符串并遍历
for (String fruit : str.split(",")) {
// 3. 将每个元素添加到 List 中
fruitList.add(fruit);
}
System.out.println("原始字符串: " + str);
System.out.println("转换后的 List: " + fruitList);
System.out.println("List 的类型: " + fruitList.getClass().getName()); // java.util.ArrayList
}
}
优点:
- 易于理解:逻辑非常直接,没有隐藏的复杂性。
- 完全可控:可以在循环中添加任何自定义逻辑(如过滤掉空字符串、进行转换等)。
特殊情况:处理逗号和空格
这是一个非常常见的需求,例如处理 "apple, banana, orange, grape" 这样的字符串,如果不加处理,直接按逗号分割,会得到 ["apple", " banana", " orange", " grape"],每个元素都包含了一个前导空格。
解决方案:使用 String.split() + trim() + Stream
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StringWithSpacesExample {
public static void main(String[] args) {
String str = "apple, banana, orange, grape";
// 使用 Stream API,分割后对每个元素进行 trim() 操作
List<String> fruitList = Arrays.stream(str.split(","))
.map(String::trim) // 等价于 .map(s -> s.trim())
.collect(Collectors.toList());
System.out.println("原始字符串: " + str);
System.out.println("转换后的 List (已去除空格): " + fruitList);
// 输出: [apple, banana, orange, grape]
}
}
总结与选择
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
split() + Arrays.asList() |
简单、代码少 | 返回不可变 List,不能增删 |
当你只需要读取列表内容,不需要修改时。 |
split() + Stream API |
现代、灵活、返回可变 List、可链式操作 |
需要 Java 8+,代码稍长 | 推荐使用,几乎所有场景都适用,尤其是需要后续处理(如过滤)时。 |
手动循环 add() |
逻辑清晰、完全可控、无版本限制 | 代码冗长,不如 Stream 优雅 | 需要在循环中添加复杂逻辑,或在不支持 Java 8 的环境中。 |
最终建议:
- 对于绝大多数现代 Java 项目,强烈推荐使用方法二(Stream API),它既简洁又强大,是处理这类转换任务的最佳实践。
- 如果只是想快速得到一个列表用于遍历,并且确定不会修改它,方法一 (
split+asList) 也是一个不错的选择。

(图片来源网络,侵删)
