回答
表情符號可在下列範圍內(source)中找到:
- U + 2190到U + 21FF
- U + 2600 U + 26FF
- U + 2700至U + 27BF
- U + 3000 U + 303F
- U + 1F300到U + 1F64F
- U + 1F680到U + 1F6FF
您可以使用此行腳本一次來過濾他們都:
text.replace("/[\u2190-\u21FF]|[\u2600-\u26FF]|[\u2700-\u27BF]|[\u3000-\u303F]|[\u1F300-\u1F64F]|[\u1F680-\u1F6FF]/g", "");
這是一個可能的答案,但不處理所有情況。但是, – user210504
@ user210504它不處理什麼情況?如果你沒有例子,說「這不處理所有情況」是沒有用的。 –
不適用於Xperia Z 4.4 – JiTHiN
下面是我用它來去除表情符號。注:API 24和前鋒
public String remove_Emojis_For_Devices_API_24_Onwards(String name)
{
// we will store all the non emoji characters in this array list
ArrayList<Character> nonEmoji = new ArrayList<>();
// this is where we will store the reasembled name
String newName = "";
//Character.UnicodeScript.of() was not added till API 24 so this is a 24 up solution
if (Build.VERSION.SDK_INT > 23) {
/* we are going to cycle through the word checking each character
to find its unicode script to compare it against known alphabets*/
for (int i = 0; i < name.length(); i++) {
// currently emojis don't have a devoted unicode script so they return UNKNOWN
if (!(Character.UnicodeScript.of(name.charAt(i)) + "").equals("UNKNOWN")) {
nonEmoji.add(name.charAt(i));//its not an emoji so we add it
}
}
// we then cycle through rebuilding the string
for (int i = 0; i < nonEmoji.size(); i++) {
newName += nonEmoji.get(i);
}
}
return newName;
}
所以如果我們通過一個字符串這僅適用於:
remove_Emojis_For_Devices_API_24_Onwards( 「測試印度語:ढ日本:韓國な:ㅂ」);
返回:測試印度語:ढ日本:韓國な:ㅂ
表情放置或計數不要緊
最新的表情符號的數據可以在這裏找到:
http://unicode.org/Public/emoji/
有一個以emoji版本命名的文件夾。 作爲應用程序開發人員的一個好主意是使用最新版本。
當您查看文件夾時,您會看到文本文件。 你應該檢查emoji-data.txt。它包含所有標準的表情符號代碼。
表情符號有許多小符號代碼範圍。 最好的支持將是檢查你的應用程序中的所有這些。
有人問爲什麼有5位數字的代碼,我們只能在\ u後指定4。 那麼這些代碼是由代理對構成的。通常使用2個符號來編碼一個表情符號。
例如,我們有一個字符串。
String s = ...;
UTF-16表示
byte[] utf16 = s.getBytes("UTF-16BE");
遍歷UTF-16
for(int i = 0; i < utf16.length; i += 2) {
獲取一個字符
char c = (char)((char)(utf16[i] & 0xff) << 8 | (char)(utf16[i + 1] & 0xff));
現在檢查代理對。表情符號位於第一個平面上,因此請檢查0xd800..0xd83f範圍內的第一部分對。
if(c >= 0xd800 && c <= 0xd83f) {
high = c;
continue;
}
代理對範圍的第二部分是0xdc00..0xdfff。我們現在可以將一對轉換爲一個5位數的代碼。
else if(c >= 0xdc00 && c <= 0xdfff) {
low = c;
long unicode = (((long)high - 0xd800) * 0x400) + ((long)low - 0xdc00) + 0x10000;
}
所有其他符號都不是對,因此按原樣處理它們。
else {
long unicode = c;
}
現在使用emoji-data.txt中的數據來檢查它是否是表情符號。 如果是,則跳過它。如果沒有,則將字節複製到輸出字節數組。
最後字節陣列由
String out = new String(outarray, Charset.forName("UTF-16BE"));
P.S.如果你想刪除一些額外的符號,可以在這裏找到Unicode範圍:http://jrgraphix.net/research/unicode.php – NoAngel
- 1. 從字符串提取表情符號
- 2. 從推文中刪除表情符號(不是表情符號!)字符串
- 3. 與表情符號分割字符串
- 4. JSX表情符號字符串
- 5. 如何在字符串(python,perl)中查找表情符號,unicode字符和表情符號的文本描述?
- 6. Android/Java - 如何檢測字符串中是否存在表情符號/表情符號?
- 7. 使用sed過濾掉表情符號
- 8. 如何從android中的字符串中提取文字表情符號
- 9. 將表情符號/表情符號添加到MSSQL表中
- 10. 如何從字符串中除去表情符號中的所有字符
- 11. 解碼字符串與表情符號字符,如\ ud83d
- 12. 渲染中的表情符號:表情符號:格式
- 13. PHP文字表情符號
- 14. 從iPhone發送表情符號到android
- 15. 以表情符號或不表情符號?
- 16. 帶表情符號/表情符號的網頁瀏覽器
- 17. 用表情符號替換表情符號
- 18. NSString與表情符號/表情符號網址編碼
- 19. 防止顯示錶情符號字符
- 20. 使用擴展語法從包含表情符號的字符串中過濾空字符串
- 21. NSTextView中的表情符號
- 22. 什麼是表情符號?
- 23. 檢測字符串中的字符是否是表情符號(使用Android)
- 24. 表情符號鍵盤
- 25. 在Android中顯示錶情符號
- 26. 正則表達式字符串過濾 - 如何讓`-`符號?
- 27. JSON字符串被截斷當表情符號在數據中
- 28. 將兩個代碼表情符號放入字符串中?
- 29. 如何製作表情符號鍵盤
- 30. iOS iPhone的表情符號
正則表達式轉換成字符串是一個選項。或者,如果emojis列表衆所周知,那麼您可以遍歷並刪除輸入中的匹配項的簡單列表就可以正常工作。 –
請參閱http://stackoverflow.com/questions/12013341/removing-characters-of-a-specific-unicode-range-from-a-string – Sujen
您可以使用Character類 http://stackoverflow.com/questions/ 28366172/check-if-letter-is-emoji/41147459#41147459 – user2474486