【代碼片段】檢測文本中是否有emoji字符以及過濾

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace QuickEAS.CoreLib
{
    public static class LibEmojiUtils
    {
        /**
          * 檢測是否有emoji字符
          * @param source
          * @return 一旦含有就拋出
          */
        public static Boolean containsEmoji(String source)
        {
            char[] item = source.ToCharArray();
            for (int i = 0; i < source.Length; i++)
            {
                if (isEmojiCharacter(item[i]))
                    return true; //do nothing,判斷到了這裏表明,確認有表情字符
            }
            return false;
        }
        private static Boolean isEmojiCharacter(char codePoint)
        {
            return (codePoint == 0x0) ||
                    (codePoint == 0x9) ||
                    (codePoint == 0xA) ||
                    (codePoint == 0xD) ||
                    ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||
                    ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) ||
                    ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
        }
        /**
         * 過濾emoji 或者 其他非文字類型的字符
         * @param source
         * @return
         */
        public static String filterEmoji(String source)
        {
            if (!containsEmoji(source))
                return source;//如果不包含,直接返回
            //到這裏鐵定包含
            StringBuilder buf = null;
            char[] item = source.ToCharArray();
            for (int i = 0; i < source.Length; i++)
            {
                char codePoint = item[i];
                if (isEmojiCharacter(codePoint))
                {
                    if (buf == null)
                        buf = new StringBuilder(source.Length);
                    buf.Append(codePoint);
                }
            }
            if (buf == null)
                return source;//如果沒有找到 emoji表情,則返回源字符串
            else
            {
                if (buf.Length == source.Length)
                {
                    buf = null;//這裏的意義在於儘可能少的toString,因爲會重新生成字符串
                    return source;
                }
                else
                    return buf.ToString();
            }

        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章