此问题已在此处有答案:
How can I replace non-printable Unicode characters in Java?(9个回答)
5天前关闭。
此帖子5天前编辑并提交审核,未能重新打开帖子:
原始关闭原因未解决
我看到Java中的下面一行删除了扩展拉丁字符,这是不应该做的:
String finalStr = value.replaceAll("\\P{Print}", " ");
\\P{Print}
regexp用于删除代码32以下的不可打印字符。但下面的扩展拉丁字符不是不可打印的,它们是可打印的。Áéü œ, Š, Ÿ œ
=〉, ,
String finalStr = value.replaceAll("\\P{Print}", " ");
在我的例子中,我需要删除所有不可打印的字符〈Code 32,但保留所有其他字符,包括Extended-Latin。
1条答案
按热度按时间c6ubokkw1#
根据the documentation,默认情况下这些类仅适用于US-ASCII
具体而言:
把所有这些放在一起,
\p{print}
只匹配[a-zA-Z0-9\x20]
。然而,在文档中,我们可以找到:
以下预定义字符类和POSIX字符类符合附录C的建议:指定UNICODE_CHARACTER_CLASS标志时Unicode正则表达式的兼容性属性。
因此,请确保传递
Pattern.UNICODE_CHARACTER_CLASS
,并使用Pattern.compile("\\p{Cntrl}").matcher(value).replaceAll("")
看起来
\p{Print}
也可以工作,但是如果你特别想删除控制字符,Cntrl
是正确的类。演示