从JAVA字符串中删除✅、🔥;、✈,♛和其他类似的表情符号/图像/符号 [英] Remove ✅, 🔥, ✈ , ♛ and other such emojis/images/signs from Java strings
本文介绍了从JAVA字符串中删除✅、🔥;、✈,♛和其他类似的表情符号/图像/符号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一些字符串,其中包含各种不同的表情符号/图像/符号。
并不是所有的字符串都是英语的--其中一些是其他非拉丁语言的,例如:
▓ railway??
→ Cats and dogs
I'm on 🔥
Apples ⚛
✅ Vi sign
♛ I'm the king ♛
Corée ♦ du Nord ☁ (French)
gjør at både ◄╗ (Norwegian)
Star me ★
Star ⭐ once more
早上好 ♛ (Chinese)
Καλημέρα ✂ (Greek)
another ✓ sign ✓
добрай раніцы ✪ (Belarus)
◄ शुभ प्रभात ◄ (Hindi)
✪ ✰ ❈ ❧ Let's get together ★. We shall meet at 12/10/2018 10:00 AM at Tony's.❉
...以及更多此类内容。
我想去掉所有这些符号/图像,只保留不同语言的字母(和标点符号)。
我尝试使用EmojiParser library:
清洁标牌String withoutEmojis = EmojiParser.removeAllEmojis(input);
问题是EmojiParser无法删除大多数符号。到目前为止,我只找到了♦标志,但它被移走了。 其他标志(如✪❉★✰❈❧✂❋r✿♛🔥)不会被删除。
有没有办法从输入字符串中删除所有这些符号,而只保留不同语言的字母和标点符号?
推荐答案
与其将某些元素列入黑名单,不如创建您希望保留的字符的白名单?这样你就不需要担心每个新的表情符号都会被添加。
String characterFilter = "[^\p{L}\p{M}\p{N}\p{P}\p{Z}\p{Cf}\p{Cs}\s]";
String emotionless = aString.replaceAll(characterFilter,"");
所以:
[\p{L}\p{M}\p{N}\p{P}\p{Z}\p{Cf}\p{Cs}\s]
是一个范围,表示Unicode中的所有数字(\p{N}
)、字母(\p{L}
)、标记(\p{M}
)、标点符号(\p{P}
)、空格/分隔符(\p{Z}
)、其他格式(\p{Cf}
)以及U+FFFF
以上的其他字符(\p{Cs}
)和换行符(\s
)。\p{L}
具体地包括西里尔文、拉丁文、汉字等其他字母表中的字符。- 正则表达式字符集中的
^
将取消匹配。
示例:
String str = "hello world _# 皆さん、こんにちは! 私はジョンと申します。🔥";
System.out.print(str.replaceAll("[^\p{L}\p{M}\p{N}\p{P}\p{Z}\p{Cf}\p{Cs}\s]",""));
// Output:
// "hello world _# 皆さん、こんにちは! 私はジョンと申します。"
如果您需要更多信息,请查看Javadocumentation中的正则表达式。
这篇关于从JAVA字符串中删除✅、🔥;、✈,♛和其他类似的表情符号/图像/符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文