Java全空格字符串trim后split返回长度1而非0原因求解
原因说明
你遇到的返回值异常由Java中trim()和split()两个方法的执行逻辑共同导致:
- 当入参是全空格字符串时,
s.trim()会移除所有首尾空格,直接返回空字符串"" - 此时调用
split(" ")会触发JavaString类的默认分割规则:- 当待分割的字符串本身为空时,只要没有匹配到任何可分割的分割符,返回的数组会默认保留原字符串作为唯一元素,最终得到的数组是
[""],长度固定为1 - 你使用的分割规则是单个空格
" ",空字符串中不存在任何空格字符,不会触发分割拆分,自然也不会产生更多元素
- 当待分割的字符串本身为空时,只要没有匹配到任何可分割的分割符,返回的数组会默认保留原字符串作为唯一元素,最终得到的数组是
- 你观察到“打印出来的分割后数组看起来是空的”,是因为数组唯一元素是空字符串,
Arrays.toString(new String[]{""})的输出视觉上和空数组的输出高度相似,很容易产生误解。
修复方案参考
可以先判断trim后的字符串是否为空,再做分割计数:
public int countSegments(String s) { String trimmed = s.trim(); if (trimmed.isEmpty()) { return 0; } // 用匹配任意数量空白的正则做分割,避免连续空格产生多余空元素 return trimmed.split("\\s+").length; }
内容的提问来源于stack exchange,提问作者AnujaP
相关产品推荐
相关产品推荐

