从字符串中删除非ASCII不可打印字符
我得到的用户输入包括非ASCII字符和不可打印的字符,例如
\xc2d\xa0
\xe7
\xc3\ufffdd
\xc3\ufffdd
\xc2\xa0
\xc3\xa7
\xa0\xa0
例如:
email : abc@gmail.com\xa0\xa0street : 123 Main St.\xc2\xa0
所需的输出:
email : abc@gmail.com street : 123 Main St.
使用Java删除它们的最佳方法是什么?
我尝试了以下操作,但似乎不起作用
public static void main(String args[]) throws UnsupportedEncodingException { String s = "abc@gmail\\xe9.com";
String email = "abc@gmail.com\\xa0\\xa0";
System.out.println(s.replaceAll("\\P{Print}", ""));
System.out.println(email.replaceAll("\\P{Print}", ""));
}
输出量
abc@gmail\xe9.comabc@gmail.com\xa0\xa0
回答:
您的要求不清楚。Java
String
中的所有字符都是Unicode字符,因此,如果将其删除,将留下一个空字符串。我假设您的意思是您要删除任何非ASCII,不可打印的字符。
String clean = str.replaceAll("\\P{Print}", "");
此处,\p{Print}
代表可打印ASCII字符的POSIX字符类,同时\P{Print}
是该类的补充。使用此表达式,将所有
不可 打印的ASCII字符替换为空字符串。(额外的反斜杠是因为\
在字符串文字中启动了转义序列。)
显然,所有输入字符实际上都是ASCII字符,它们表示不可打印或非ASCII字符的可打印编码。Mongo不会对这些字符串造成任何麻烦,因为它们仅包含普通的可打印ASCII字符。
这一切对我来说似乎有点可疑。我相信正在发生的事情是,数据确实确实包含不可打印和非ASCII字符,并且另一个组件(如日志记录框架)正在用可打印表示形式替换这些字符。在简单的测试中,您无法将可打印的表示形式转换回原始字符串,因此您错误地认为第一个正则表达式不起作用。
那是我的猜测,但是如果我误解了这种情况,而您确实确实需要删除文字\xHH
转义符,则可以使用以下正则表达式来实现。
String clean = str.replaceAll("\\\\x\\p{XDigit}{2}", "");
Pattern
该类的API文档很好地列出了Java的正则表达式库支持的所有语法。要详细了解所有语法的含义,我发现Regular-
Expressions.info网站非常有帮助。
以上是 从字符串中删除非ASCII不可打印字符 的全部内容, 来源链接: utcz.com/qa/404924.html