如何移除文本中除普通空格外的空白字符?修复PDF模板异常
解决PDF模板中U+200B这类空白字符的问题
你的问题出在之前的正则表达式没覆盖到U+200B这类Unicode扩展空白字符——Java默认的\s仅匹配[\t\n\x0B\f\r ],不包含零宽空格(U+200B)这类特殊空白,所以replaceAll("[^\\S ]", "")没生效。
给你几个可行的修复方案:
方案一:精准移除常见的零宽干扰字符
直接指定要清除的特殊空白字符,针对性强:
private String repair(String text) { if (text == null) { return ""; } // 移除零宽空格、零宽非连接符、零宽连接符、字节顺序标记等干扰字符 return text.stripLeading().stripTrailing() .replaceAll("\u200B|\u200C|\u200D|\uFEFF", ""); }
方案二:移除所有Unicode空格分隔符(保留常规空格)
用Unicode属性类匹配所有空格类字符,只保留常规空格:
private String repair(String text) { if (text == null) { return ""; } // \p{Zs}匹配所有Unicode空格分隔符,排除常规空格后移除其余的 return text.stripLeading().stripTrailing() .replaceAll("[\\p{Zs}&&[^ ]]", ""); }
方案三:保留可见字符和常规空格,移除所有其他字符
如果不确定还有哪些特殊字符,直接过滤掉非打印和非常规空格的字符:
private String repair(String text) { if (text == null) { return ""; } // 只保留可见打印字符和常规空格 return text.stripLeading().stripTrailing() .replaceAll("[^\\p{Print} ]", ""); }
内容的提问来源于stack exchange,提问作者Khilarian
相关产品推荐
相关产品推荐

