[英]Java - removing strange characters from a 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]", "");
輸出字符串將是:“拉丁字符串 01234567890”
賈斯汀·托馬斯 (Justin Thomas) 很接近,但這可能更接近您要查找的內容:
String nonStrange = strangeString.replaceAll("\\p{Cntrl}", "");
選擇器 \\p{Cntrl} 選擇“ 一個控制字符:[\\x00-\\x1F\\x7F]。 ”
String clean = "♠clean".replaceAll('♠', '');
我是反過來做的。 我替換了所有未定義的字母 (( ^ )):
str.replaceAll("[^a-zA-Z0-9:;.?! ]","")
所以對於像“小米體驗版latin string 01234567890”這樣的詞,我們會得到:“latin string 01234567890”
當我使用 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]", "");
將要刪除的字符放在數組列表中,然后使用 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" 還沒有測試過這個,但是沿着線。
很可能您得到的文本是用 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.
}
你不能,因為字符串是不可變的。
但是,可以創建一個刪除了不需要的字符的新字符串。 查找 String#replaceAll()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.