Created
January 27, 2015 07:57
-
-
Save ywjno/0adf8f04dd97efa93f1c to your computer and use it in GitHub Desktop.
EmojiFilter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.apache.commons.lang.StringUtils; | |
public class EmojiFilter { | |
/** | |
* 检测是否有emoji字符 | |
* @param source | |
* @return 一旦含有就抛出 | |
*/ | |
public boolean containsEmoji(String source) { | |
if (StringUtils.isBlank(source)) { | |
return false; | |
} | |
int len = source.length(); | |
for (int i = 0; i < len; i++) { | |
char codePoint = source.charAt(i); | |
if (isEmojiCharacter(codePoint)) { | |
//do nothing,判断到了这里表明,确认有表情字符 | |
return true; | |
} | |
} | |
return false; | |
} | |
private 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 String filterEmoji(String source) { | |
if (!containsEmoji(source)) { | |
return source;//如果不包含,直接返回 | |
} | |
//到这里铁定包含 | |
StringBuilder buf = null; | |
int len = source.length(); | |
for (int i = 0; i < len; i++) { | |
char codePoint = source.charAt(i); | |
if (isEmojiCharacter(codePoint)) { | |
if (buf == null) { | |
buf = new StringBuilder(source.length()); | |
} | |
buf.append(codePoint); | |
} else { | |
} | |
} | |
if (buf == null) { | |
return source;//如果没有找到 emoji表情,则返回源字符串 | |
} else { | |
if (buf.length() == len) {//这里的意义在于尽可能少的toString,因为会重新生成字符串 | |
buf = null; | |
return source; | |
} else { | |
return buf.toString(); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment