[英]Remove non printable character from a string in Java
我有如下字符串:
String s = "$$$$A very beautiful girl having loads of £££££ in her 20�s.";
我經歷了一些 StackOverflow 響應並嘗試了以下內容:
s.replaceAll("[^\\x00-\\x7F]", " ");
s.replaceAll("[^\\p{ASCII}]", " ");
他們都刪除了奇怪的問號,但他們也刪除了保留美元 ($) 符號的英鎊 (£) 符號。 我需要保留貨幣符號。 你能提出更合適的方法嗎?
另外,有沒有其他庫可以做到這一點而不是使用正則表達式?
嘗試使用:
s.replaceAll("[^\\x00-\\xFF]", " ");
您的問題是,井號是Latin-1 Supplement
Unicode 塊的一部分,當您過濾到7F
時不包括在內。
要有效地從字符串中刪除所有不可打印的字符,包括經常被黑客利用的 Unicode 控制代碼:
String broken = "\r\nhello world\b\u200E\uDB80";
StringBuilder fixed = broken.codePoints()
.filter(c -> {
switch (Character.getType(c)) {
case Character.CONTROL:
case Character.FORMAT:
case Character.PRIVATE_USE:
case Character.SURROGATE:
case Character.UNASSIGNED:
return false;
default:
return true;
}
})
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append);
assertEquals("hello world", fixed.toString());
如果要刪除其他字符類,只需將它們包含在 case 語句中即可。 這實現了一個黑名單。 如果你喜歡一個白名單,那么你可以反轉的邏輯返回true
當一個字符是一個可以接受的類型和返回false
的所有其他人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.