1. 概述

字符串分割是Java开发中的高频操作。本文将介绍几种简单实用的API,帮助你在不同场景下高效处理字符串分割任务。这些方法各有特点,掌握它们能让你在编码时游刃有余。

2. String.split() 方法

Java核心库中的String类自带split()方法,这是最基础也最常用的分割方式。它根据指定分隔符将字符串拆分为字符串数组,足以应对大多数场景。

基础用法示例

按逗号分割

String[] splitted = "peter,james,thomas".split(",");

按空格分割

String[] splitted = "car jeep scooter".split(" ");

⚠️ 按点分割需转义

String[] splitted = "192.168.1.178".split("\\.");

多字符分割(正则表达式)

String[] splitted = "b a, e, l.d u, n g".split("\\s+|,\\s*|\\.\\s*"));

3. StringUtils.split() 方法

Apache Commons Lang提供的StringUtils类是String.split()的增强版,其split()方法具有空安全特性,默认使用空格作为分隔符。

核心优势

自动处理多余空格

String[] splitted = StringUtils.split("car   jeep  scooter");

即使输入字符串包含连续空格,也能正确分割,避免生成空字符串元素。

4. Guava Splitter API

Google Guava库提供了流式API风格的Splitter,通过链式调用实现灵活的分割控制,特别适合需要精细处理的场景。

链式调用示例

List<String> resultList = Splitter.on(',')
  .trimResults()        // 去除结果元素两端空格
  .omitEmptyStrings()   // 忽略空字符串
  .splitToList("car,jeep,, scooter");

5. 分割并去除空格

实际开发中常遇到分隔符周围存在多余空格的情况。以下是两种高效处理方案:

方案一:正则表达式预处理

String input = " car , jeep, scooter ";
String[] splitted = input.trim().split("\\s*,\\s*");
  • trim()先去除字符串首尾空格
  • 正则表达式\s*,\s*处理逗号两侧的空格

方案二:Java 8 Stream处理

String[] splitted = Arrays.stream(input.split(","))
  .map(String::trim)    // 对每个元素去除空格
  .toArray(String[]::new);

6. 将字符串均分为两部分

需要将字符串精确对半分割时,可通过计算中点配合substring()实现:

String hello = "Baeldung";
int mid = hello.length() / 2;
String[] parts = { 
    hello.substring(0, mid),  // 前半部分
    hello.substring(mid)      // 后半部分
};

7. 总结

场景 推荐方案 特点
简单分割 String.split() 原生支持,无需依赖
空值安全 StringUtils.split() 自动处理空输入和多余空格
复杂控制 Guava Splitter 链式调用,功能强大
精确对半 substring() 手动计算位置

💡 踩坑提示:使用String.split()时,当分隔符是正则表达式特殊字符(如.|等),务必记得转义!否则会得到意外结果。

本文所有示例代码已上传至GitHub仓库,可直接运行验证。


原始标题:Split a String in Java