Java – 从String中删除奇怪的字符

如何从字符串中删除奇怪的和不需要的Unicode字符(例如带问号的黑色菱形)?

更新:

请告诉我对应于“带有问号的黑色钻石”的Unicode字符串或正则表达式。

带问号的黑色菱形不是unicode字符 – 它是字体无法显示的占位符。 如果字符串中存在的字形不在您用于显示该字符串的字体中,您将看到占位符。 这被定义为U + FFFD: 。 它的外观取决于您使用的字体。

您可以使用java.text.normalizer删除不在“普通”ASCII字符集中的Unicode字符。

你可以使用String.replaceAll("[my-list-of-strange-and-unwanted-chars]","")

没有Character.isStrangeAndUnWanted() ,你必须定义你想要的。

如果要删除控制字符,可以执行此操作

 String str = "\u0000\u001f hi \n"; str = str.replaceAll("[\u0000-\u001f]", ""); 

打印hi (保持空间)。

编辑如果你想知道任何16位字符的unicode你可以做

 int num = string.charAt(n); System.out.println(num); 

要从字符串中删除非拉丁语符号,请使用以下代码:

 String s = "小米体验版 latin string 01234567890"; s = s.replaceAll("[^\\x00-\\x7F]", ""); 

输出字符串为:“latin string 01234567890”

贾斯汀托马斯很接近,但这可能更接近你所期待的:

 String nonStrange = strangeString.replaceAll("\\p{Cntrl}", ""); 

选择器\ p {Cntrl}选择“ 控制字符:[\ x00- \ x1F \ x7F]。 ”

使用String.replaceAll() :

 String clean = "♠clean".replaceAll('♠', ''); 

将您想要删除的字符放在数组列表中,然后使用replaceAll方法遍历数组:

 String str = "Some text with unicode !@#$"; ArrayList badChar = new ArrayList(); badChar= ['@', '~','!']; //modify this to contain the unicodes for (String s : badChar) { String resultStr = str.replaceAll(s, str); } 

你将最终得到一个清理过的字符串“resultStr”没有测试这个,但沿着这条线。

当我使用getAsciiStream将clob转换为字符串时,我也发生了同样的事情。

有效地解决了它

 public String getstringfromclob(Clob cl) { StringWriter write = new StringWriter(); try{ Reader read = cl.getCharacterStream(); int c = -1; while ((c = read.read()) != -1) { write.write(c); } write.flush(); }catch(Exception ec) { ec.printStackTrace(); } return write.toString(); } 

过滤英文,中文,数字和标点符号

 str = str.replaceAll("[^!-~\\u20000-\\uFE1F\\uFF00-\\uFFEF]", ""); 

你不能,因为字符串是不可变的。

但是,可以创建一个删除了不需要的字符的新字符串。 查找String#replaceAll()。