从JAVA字符串中删除✅、🔥、✈,♛和其他类似的表情符号/图像/符号 [英] Remove ✅, 🔥, ✈ , ♛ and other such emojis/images/signs from Java strings

查看:0
本文介绍了从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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆