1.輸入監聽emoji,然後攔截掉
/**
* 將系統表情轉化爲字符串
*
* @param s
* @return
*/
public static boolean havaEmoji(String s) {
int length = s.length();
String context = "";
//循環遍歷字符串,將字符串拆分爲一個一個字符
for (int i = 0; i < length; i++) {
char codePoint = s.charAt(i);
//判斷字符是否是emoji表情的字符
if (isEmojiCharacter(codePoint)) {
//如果是就返回
return true;
}
}
return false;
}
/**
* 是否包含表情
*
* @param codePoint
* @return 如果不包含 返回false,包含 則返回true
*/
public 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)));
//使用
mBinding.etContent.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
int index = mBinding.etContent.getSelectionStart();//獲取光標位置
if (havaEmoji(editable.toString())) {//包含表情就刪掉這個表情
editable.delete(index - 1, index);//刪除光標前的字符
return;
}
}
});
2.不攔截掉emoji,直接約定轉換,前端轉成String,後臺接受時轉成emoji
//前臺轉換
/**
* 將系統表情轉化爲字符串
*
* @param s
* @return
*/
public static String getString(String s) {
int length = s.length();
String context = "";
//循環遍歷字符串,將字符串拆分爲一個一個字符
for (int i = 0; i < length; i++) {
char codePoint = s.charAt(i);
//判斷字符是否是emoji表情的字符
if (isEmojiCharacter(codePoint)) {
//如果是將以大括號括起來
String emoji = "{" + Integer.toHexString(codePoint) + "}";
context = context + emoji;
continue;
}
context = context + codePoint;
}
return context;
}
/**
* 是否包含表情
*
* @param codePoint
* @return 如果不包含 返回false,包含 則返回true
*/
public 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)));
}
//後臺轉換
/**
* 將表情描述轉換成表情
*
* @param str
* @return
*/
public static String getEmoji(Context context, String str) {
String string = str;
String rep = "\\{(.*?)\\}";
Pattern p = Pattern.compile(rep);
Matcher m = p.matcher(string);
while (m.find()) {
String s1 = m.group().toString();
String s2 = s1.substring(1, s1.length() - 1);
String s3;
try {
s3 = String.valueOf((char) Integer.parseInt(s2, 16));
string = string.replace(s1, s3);
} catch (Exception e) {
e.printStackTrace();
}
}
return string;
}