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()。