Java如何移除字符串中不可见的零宽空格[ZWSP]特殊字符
问题原因
trim() 方法仅能处理ASCII编码范围内的空白控制字符(Unicode编码值≤U+0020的空白类字符),你遇到的[ZWSP]是零宽空格,对应Unicode编码为U+200B,不在trim()的处理覆盖范围内,因此常规去空白操作无法移除该字符。
解决方案
在拆分字符串前,先全局清除所有零宽空格字符,再执行拆分、转集合的逻辑即可得到目标结果,完整实现代码如下:
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class ZwspHandler { public static void main(String[] args) { String str = "+Aa+Bk+Bo+Ac+Lc"; // 全局移除所有零宽空格字符 String cleanedStr = str.replace("\u200B", ""); // 拆分后转List List<String> targetList = Arrays.stream(cleanedStr.split("\\+")) .collect(Collectors.toList()); // 验证输出:[, Aa, Bk, Bo, Ac, Lc] System.out.println(targetList); } }
扩展适配
如果业务场景中可能混入其他零宽类特殊字符(零宽不连字U+200C、零宽连字U+200D、字节顺序标记U+FEFF),可以将字符清理逻辑替换为正则批量替换,一次性清除所有这类不可见零宽字符:
// 批量移除所有常见零宽特殊字符 String cleanedStr = str.replaceAll("[\u200B\u200C\u200D\uFEFF]", "");
注意:清理字符后不需要额外调用
trim()处理拆分后的元素,避免误删需要保留的首位置空字符串元素,保证输出格式和要求一致。
内容的提问来源于stack exchange,提问作者Tarun Chaudhary
相关产品推荐
相关产品推荐

