判断是否是 emoji表情

转载 2015年07月08日 15:00:30


  1. public class EmojiFilter {

  2.     /**
  3.      * 检测是否有emoji字符
  4.      * @param source
  5.      * [url=home.php?mod=space&uid=7300]@return[/url] 一旦含有就抛出
  6.      */
  7.     public static boolean containsEmoji(String source) {
  8.         if (StringUtils.isBlank(source)) {
  9.             return false;
  10.         }

  11.         int len = source.length();

  12.         for (int i = 0; i < len; i++) {
  13.             char codePoint = source.charAt(i);

  14.             if (isEmojiCharacter(codePoint)) {
  15.                 //do nothing,判断到了这里表明,确认有表情字符
  16.                 return true;
  17.             }
  18.         }

  19.         return false;
  20.     }

  21.     private static boolean isEmojiCharacter(char codePoint) {
  22.         return !((codePoint == 0x0) ||
  23.                 (codePoint == 0x9) ||
  24.                 (codePoint == 0xA) ||
  25.                 (codePoint == 0xD) ||
  26.                 ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||
  27.                 ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) ||
  28.                 ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)));
  29.     }

  30.     /**
  31.      * 过滤emoji 或者 其他非文字类型的字符
  32.      * @param source
  33.      * @return
  34.      */
  35.     public static String filterEmoji(String source) {

  36.         if (!containsEmoji(source)) {
  37.             return source;//如果不包含,直接返回
  38.         }
  39.         //到这里铁定包含
  40.         StringBuilder buf = null;

  41.         int len = source.length();

  42.         for (int i = 0; i < len; i++) {
  43.             char codePoint = source.charAt(i);

  44.             if (!isEmojiCharacter(codePoint)) {
  45.                 if (buf == null) {
  46.                     buf = new StringBuilder(source.length());
  47.                 }

  48.                 buf.append(codePoint);
  49.             } else {
  50.             }
  51.         }

  52.         if (buf == null) {
  53.             return source;//如果没有找到 emoji表情,则返回源字符串
  54.         } else {
  55.             if (buf.length() == len) {//这里的意义在于尽可能少的toString,因为会重新生成字符串
  56.                 buf = null;
  57.                 return source;
  58.             } else {
  59.                 return buf.toString();
  60.             }
  61.         }

  62.     }
  63. }
复制代码
大家请仔细阅读下该类的代码。你要是用该类,调用filterEmoji方法,肯定可以把表情过滤掉的,但是 大家请仔细阅读下containsEmoji这个方法,这个方法返回的值 永远是true,也就是说filterEmoji方法里面的!containsEmoji(source)这个判断永远是false,然后永远会继续往下执行。然后大家再分析一下filterEmoji这个方法,其实里面已经包含了用isEmojiCharacter来循环判断来过滤表情的方法。所以 我们只需要把filterEmoji这个方法中的if (isEmojiCharacter(codePoint))这部分代码去掉,直接用这个方法 就可以实现效果了。请使用以下类就可以了。下面连接附上我的小demo。
  1. public class EmojiFilter {
  2. /**
  3. * 是否包含表情

  4. * @author 杨振威 2015-3-26 下午2:41:08
  5. * @param codePoint
  6. * @return 如果不包含 返回false,包含 则返回true
  7. */

  8. private static boolean isEmojiCharacter(char codePoint) {
  9. return !((codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)
  10. || (codePoint == 0xD)
  11. || ((codePoint >= 0x20) && (codePoint <= 0xD7FF))
  12. || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)));
  13. }

  14. /**
  15. * 过滤emoji 或者 其他非文字类型的字符

  16. * @author 杨振威 2015-3-26 下午2:42:11
  17. * @param source
  18. * @return
  19. */
  20. public static String filterEmoji(String source) {

  21. StringBuilder buf = null;

  22. int len = source.length();

  23. for (int i = 0; i < len; i++) {
  24. char codePoint = source.charAt(i);

  25. if (!isEmojiCharacter(codePoint)) {// 如果不包含 则将字符append
  26. if (buf == null) {
  27. buf = new StringBuilder(source.length());
  28. }

  29. buf.append(codePoint);
  30. } else {
  31. }
  32. }

  33. if (buf == null) {
  34. return source;// 如果没有找到 emoji表情,则返回源字符串
  35. } else {
  36. if (buf.length() == len) {// 这里的意义在于尽可能少的toString,因为会重新生成字符串
  37. buf = null;
  38. return source;
  39. } else {
  40. return buf.toString();
  41. }
  42. }

  43. }
  44. }

iOS中Emoji表情的判断

问题服务器端不支持Emoji表情,因此客户端在上传用户输入时,不能包含Emoji表情。那么,该如何判断字符串中是否含有Emoji呢?...
  • liujinlongxa
  • liujinlongxa
  • 2015年03月11日 22:58
  • 35958

java 判断字符串中是否包含emoj表情及过滤,完美解决。

最近遇到一个很蛋疼的问题,用户如果在客户端输入表情可能会引起一些报错,在查了一些资料后发现很多坑人的代码,我在总结了之后给出了一个比较完美的版本。 亲测可以判断绝大多数表情。 package com....
  • luozisonghao
  • luozisonghao
  • 2016年12月22日 21:51
  • 7017

检测字符串包含emoji表情

有时候在开发时会遇到不希望字符串中包含emoji表情的情况,Google之后发现了方法,但是似乎iOS9之后的emoji无法过滤,继续寻找方法,在一个NSString的扩展中发现了办法//判断是否有e...
  • yusirxiaer
  • yusirxiaer
  • 2016年09月02日 12:13
  • 1579

判断字符串中是否包含emoji表情

  • 2016年03月31日 10:54
  • 2KB
  • 下载

[IOS]字符串判断、移除emoji 表情

移除emoji表情、判断emoji表情
  • w250130255
  • w250130255
  • 2014年12月26日 14:20
  • 2582

iOS中Emoji表情的判断

问题服务器端不支持Emoji表情,因此客户端在上传用户输入时,不能包含Emoji表情。那么,该如何判断字符串中是否含有Emoji呢?...
  • liujinlongxa
  • liujinlongxa
  • 2015年03月11日 22:58
  • 35958

IOS开发中emoji表情如何判断

在ios开发中,很多时候我们要对textfield中的文本进行限制,包括有没有空格,长度在哪个范围里面。不过,最近发现一个问题,ios手机自带的键盘里面可以输入一些emoji表情,而且这些表情在服务器...
  • qq_29892943
  • qq_29892943
  • 2015年12月15日 14:09
  • 277

iOS中textField、textView判断过滤禁用emoji表情

iOS中textField、textView判断过滤禁用emoji表情
  • qq_23292307
  • qq_23292307
  • 2016年10月26日 10:42
  • 204

iOS中Emoji表情的判断

版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[-] 问题解决方案 问题 服务器端不支持Emoji表情,因此客户端在上传用户输入时,不...
  • u010850094
  • u010850094
  • 2017年01月22日 15:09
  • 125

iOS emoji表情转码 或者判断

如果项目中有评论或者信息恢复的地方,往往会用到emoji,有时候如后台不支持emoji,就会显示乱码错误,我们可以把emoji转成unicode编码或者utf8编码格式传给服务器。当然如果后台服务器接...
  • pengyuan_D
  • pengyuan_D
  • 2016年08月04日 10:24
  • 1019
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:判断是否是 emoji表情
举报原因:
原因补充:

(最多只允许输入30个字)