如何从字符串中删除奇怪且不需要的Unicode字符(例如带问号的黑色菱形)?
更新:
请告诉我对应于“带有问号的黑色钻石”的Unicode字符串或正则表达式。
答案 0 :(得分:17)
带有问号的黑色钻石不是unicode字符 - 它是字体无法显示的占位符。如果字符串中存在的字形不在您用于显示该字符串的字体中,您将看到占位符。这被定义为U + FFFD: 。它的外观取决于您使用的字体。
您可以使用java.text.normalizer
删除不在“普通”ASCII字符集中的Unicode字符。
答案 1 :(得分:16)
您可以使用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);
答案 2 :(得分:6)
要从字符串中删除非拉丁语符号,请使用以下代码:
String s = "小米体验版 latin string 01234567890";
s = s.replaceAll("[^\\x00-\\x7F]", "");
输出字符串将是: "拉丁字符串01234567890"
答案 3 :(得分:4)
String nonStrange = strangeString.replaceAll("\\p{Cntrl}", "");
选择器\ p {Cntrl}选择“A control character: [\x00-\x1F\x7F].”
答案 4 :(得分:2)
String clean = "♠clean".replaceAll('♠', '');
答案 5 :(得分:0)
将要删除的字符放在数组列表中,然后使用replaceAll方法遍历数组:
String str = "Some text with unicode !@#$";
ArrayList<String> badChar = new ArrayList<String>();
badChar= ['@', '~','!']; //modify this to contain the unicodes
for (String s : badChar) {
String resultStr = str.replaceAll(s, str);
}
你最终会得到一个清理过的字符串“resultStr” 没有测试这个,但是沿着这条线。
答案 6 :(得分:0)
使用
有效地解决了它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();
}
答案 7 :(得分:0)
过滤英文,中文,数字和标点符号
str = str.replaceAll("[^!-~\\u20000-\\uFE1F\\uFF00-\\uFFEF]", "");
答案 8 :(得分:0)
您获得的文本很可能是用UTF-8以外的其他语言编码的。您可以做的是不允许上传具有其他编码(例如Latin-1)的文本:
try {
CharsetDecoder charsetDecoder = StandardCharsets.UTF_8.newDecoder();
charsetDecoder.onMalformedInput(CodingErrorAction.REPORT);
return IOUtils.toString(new InputStreamReader(new FileInputStream(filePath), charsetDecoder));
}
catch (MalformedInputException e) {
// throw an exception saying the file was not saved with UTF-8 encoding.
}
答案 9 :(得分:0)
我做了另一种方式。我将替换所有未定义的字母(( ^ )):
str.replaceAll("[^a-zA-Z0-9:;.?! ]","")
例如“小米体验版拉丁字符串01234567890” 我们将得到:“拉丁字符串01234567890”
答案 10 :(得分:-3)
你不能因为字符串是不可变的。
但是,可以创建一个删除了不需要的字符的新字符串。查找String#replaceAll()。