Java 處理不可見特殊字符的坑


看下圖所示,兩個空字符串不相等

因為str中有不可兼得特殊字符,可以在debug中將str的值復制出來,然后粘貼到雙引號中們就可以看到這個字符的真面目,如下圖所示:

\uFEFF為控制字符,名為"零寬不折行空格(Zero Width No-Break Space)",此外,類似的不可見字符還有\u202A(從左至右嵌入)、\u202E(從右至左強制)等控制字符

那我們事怎么遇到這些控制字符的呢?

在讀取文件或者從某文件屬性中直接復制路徑經常會遇到這種問題

 

在開發中可以對獲得的字符串進行以下處理,來刪除這些控制字符:網上很多說使用正則\\p{Cntrl}進行替換,經過測試並不起作用,而是用朋友告訴我的\\p{C}

        String str2 = str1.replaceAll("\\p{C}", "");
        System.out.println("".equals(str2));

就是一些特殊的Unicode字符,如果不確定,可先判斷長度是否一樣:

 

推薦字符查詢網址查詢網址:

https://unicode-table.com/cn/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM