標籤:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespaceCommon{ public static class EmojiFilter { /** * 檢測是否有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(); } } }}
用net匹配並替換iOS標準的emojiEmoji