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

Java正则分割咨询:仅移除单个空白符的实现方法

按单个分隔空白符分割并保留多余空白的实现方案

一、正则表达式实现

完全可以用正则实现你的需求,核心是通过正向零宽断言精准定位需要移除的分隔空白符。

直接使用下面的代码即可:

String sentence = "this is a whitespace   and I want to split it";
String[] parts = sentence.split("\\s(?=\\S)");

正则说明

  • \\s:匹配任意空白字符(如果只想匹配普通空格,替换成 即可)
  • (?=\\S):正向零宽断言,确保当前匹配的空白符后面紧跟非空白字符(\\S是空白符的取反)

这个正则只会把那些衔接非空白内容的空白符作为分隔符移除,连续空白中只有最后一个符合条件的会被去掉,其余空白会保留在前面的元素里,正好得到你想要的结果:["this", "is", "a", "whitespace ", "and", "I", "want", "to", "split", "it"]

二、非正则的手动实现方案

如果对正则不太熟悉,也可以手动遍历字符串处理:

String sentence = "this is a whitespace   and I want to split it";
List<String> partsList = new ArrayList<>();
StringBuilder current = new StringBuilder();

for (int i = 0; i < sentence.length(); i++) {
    char c = sentence.charAt(i);
    if (!Character.isWhitespace(c)) {
        current.append(c);
    } else {
        // 检查下一个字符是否为非空白,判断当前空白是否是分隔符
        if (i + 1 < sentence.length() && !Character.isWhitespace(sentence.charAt(i + 1))) {
            partsList.add(current.toString());
            current.setLength(0);
        } else {
            // 非分隔空白,直接保留
            current.append(c);
        }
    }
}
// 加入最后一段内容
if (current.length() > 0) {
    partsList.add(current.toString());
}

String[] parts = partsList.toArray(new String[0]);

这个逻辑是逐字符遍历,遇到非空白就追加到当前元素;遇到空白时,判断下一个字符是否为非空白——如果是,就把当前元素存入列表并重置,否则直接保留该空白,最终也能得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:46:02