簡體   English   中英

從 Java 中的字符串中刪除不可打印的字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM