杰瑞科技汇

Java String如何转List?

核心思路

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

Java String如何转List?-图1
(图片来源网络,侵删)
  1. 分割:根据一个特定的分隔符(如逗号、空格、分号等)将原始字符串拆分成一个字符串数组。
  2. 转换:将这个字符串数组转换成你需要的 List 集合(List<String>)。

下面我们来看具体实现。


使用 String.split()Arrays.asList() (最常用)

这是最直接、最经典的方法,适用于将字符串分割成 List<String>

步骤:

  1. 使用 String.split(String regex) 方法将字符串分割成字符串数组 (String[])。
  2. 使用 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,还能进行更复杂的操作(如过滤、映射)。

步骤:

  1. 使用 String.split() 分割字符串。
  2. 使用 Arrays.stream() 将数组转换为流。
  3. 使用 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() 等。
  • 返回可变 ListCollectors.toList() 返回的是一个标准的、可修改的 ArrayList,非常方便。

手动循环添加 (最基础)

这种方法不依赖任何高级特性,通过 for 循环手动构建 List,虽然代码稍长,但逻辑非常清晰,适合初学者理解。

Java String如何转List?-图2
(图片来源网络,侵删)

步骤:

  1. 创建一个空的 ArrayList
  2. 使用 String.split() 分割字符串。
  3. 遍历分割后的数组,将每个元素 addArrayList 中。

示例代码:

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) 也是一个不错的选择。
Java String如何转List?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇