我有一個包含大量文本的字符串。這裏有一些奇怪的字符,如下所示:█✖✔♫♬▬★從java中刪除非標準字符字符串
這只是我迄今發現的一小部分。我嘗試使用replaceAll方法,但它似乎不工作。是否有一些所有這些類型的角色的集合,或者更好的是,能夠將它們刪除的庫?
我有一個包含大量文本的字符串。這裏有一些奇怪的字符,如下所示:█✖✔♫♬▬★從java中刪除非標準字符字符串
這只是我迄今發現的一小部分。我嘗試使用replaceAll方法,但它似乎不工作。是否有一些所有這些類型的角色的集合,或者更好的是,能夠將它們刪除的庫?
如果您只想在您的字符串中使用ASCII字符,則可以遍歷字符串的長度並檢查其中的ASCII值是65-90(AZ)還是97-122(az)或48-57(0- 9)
如果你不確定這個問題,你不應該試着回答它。你應該留下評論(如你所見),要求澄清。 – TheLostMind
遍歷字符和檢查每個它是否屬於某種類別定義爲「標準」(此處這樣的類別有:字母,數字,空格,或施加到先前被接受的字符改性劑):
static String standartize(String s) {
if (s == null) return null;
StringBuilder sb = new StringBuilder();
boolean based = false; // is previous character accepted base for modifier?
int c;
for (int i = 0; i < s.length(); i += Character.charCount(c)) {
c = Character.codePointAt(s, i);
if (based && Character.getType(c) == Character.MODIFIER_SYMBOL) {
sb.appendCodePoint(c);
} else if (Character.isAlphabetic(c) || Character.isDigit(c)) {
sb.appendCodePoint(c);
based = true;
} else if (Character.isWhitespace(c)) {
sb.appendCodePoint(c);
based = false;
} else {
based = false;
}
}
return sb.toString();
}
您可以添加/刪除else if
中的支票以擴大/縮小您認爲是「標準」的字符範圍:Character
h儘可能多的靜態isXxxx()
方法來測試一個角色是否屬於某個類別。
請注意,迭代不是char
項,但int
碼點。這不僅用於處理UTF-16字符,還用於處理代理對。
這不適用於以兩個UTF-16代碼單元('char')編碼的Unicode代碼點。也不會保留「結合字符」的代碼點,當與前面的基本字符結合時可能不被認爲是「怪異的」。 –
@TomBlodget好吧,你是對的。我更新了處理代理對和修飾符字符的答案。感謝您的寶貴通知。 –
您應該指定 - 樣本輸入字符串,期望的輸出字符串和您的代碼。 – TheLostMind
請定義「非標準」的含義。這些對我來說似乎是非常標準的Unicode字符。 – biziclop
「它似乎不起作用」不是問題描述。你試圖做什麼,以及它究竟是如何工作的? – Raedwald