You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java分割字符串为数组时如何保留单词内部的空格

Java字符串分割(保留内容内部空格)实现方案

问题背景

开发中存在如下场景:字符串内部分空格属于有效内容的组成部分,直接按空格分割会破坏原有内容结构。
本次待处理的目标字符串:

String phoneNumbers = "987-123-4567 123 456 7890 (123) 456-7890";

预期转换得到的字符串数组:

String[] numbers = {"987-123-4567", "123 456 7890", "(123) 456-7890"};

初始错误实现为直接按空格分割:

String[] array = phoneNumbers.split(" ");

该实现的错误输出如下,把号码内部的空格也当成了分隔符:

[987-123-4567, 123, 456, 7890, (123), 456-7890]

正确实现思路

split方法的核心是识别统一的分隔符做切割,当分隔符(空格)同时作为有效内容存在时,该方法无法区分边界,因此改用正则匹配提取目标子串的方案:直接识别所有符合电话号码格式的片段,无需额外判断空格属于分隔符还是内容。

实现代码

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PhoneNumberParser {
    public static void main(String[] args) {
        String phoneNumbers = "987-123-4567 123 456 7890 (123) 456-7890";
        // 正则覆盖三类常见电话号码格式:横杠分隔纯数字、空格分隔纯数字、带区号括号的格式
        Pattern phonePattern = Pattern.compile("\\d{3}-\\d{3}-\\d{4}|\\d{3} \\d{3} \\d{4}|\\(\\d{3}\\) \\d{3}-\\d{4}");
        Matcher matcher = phonePattern.matcher(phoneNumbers);
        
        List<String> numberList = new ArrayList<>();
        while (matcher.find()) {
            numberList.add(matcher.group());
        }
        
        String[] numbers = numberList.toArray(new String[0]);
        // 结果验证
        for (String number : numbers) {
            System.out.println(number);
        }
    }
}

运行结果

执行代码后输出完全符合预期:

987-123-4567
123 456 7890
(123) 456-7890

扩展说明

  • 如果后续出现新的电话号码格式,只需要在正则表达式中追加对应的格式规则即可,不需要调整整体逻辑
  • 该思路同样适用于其他「分隔符和内容字符重合」的字符串提取场景,比强行定义复杂的split分隔规则稳定性更高

内容的提问来源于stack exchange,提问作者Orest Dymarchuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 07:36:27