匹配emoji


edittext.addTextChangedListener(new TextWatcher() {


@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
setEditTextStyle();
if (count >= 2) {// 表情符号的字符长度最小为2
CharSequence input = s.subSequence(cursorPos, cursorPos
+ count);
if (Helper.containsEmoji(input.toString())) {
}
}
}


@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
cursorPos = et_barrage.getSelectionEnd();
}


@Override
public void afterTextChanged(Editable s) {


}
});



/**

* 检测是否有emoji表情

* @param source
* @return
*/
public static boolean containsEmoji(String source) {
int len = source.length();
for (int i = 0; i < len; i++) {
char codePoint = source.charAt(i);
if (!isEmojiCharacter(codePoint)) { // 如果不能匹配,则该字符是Emoji表情
return true;
}
}
return false;
}


/**
* 判断是否是Emoji

* @param codePoint
*            比较的单个字符
* @return
*/
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));

}


字数限制设置:

editText.setFilters(new InputFilter[]{newInputFilter.LengthFilter(100)});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中可以使用Unicode编码来匹配emoji字符。每个emoji字符都有一个唯一的Unicode编码,可以在正则表达式中使用。以下是一个示例代码,演示如何使用Java正则表达式匹配emoji字符: ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class EmojiMatcher { public static void main(String[] args) { String text = "This is a string with an emoji: \uD83D\uDC4D"; Pattern pattern = Pattern.compile("[\\x{1F000}-\\x{1F6FF}\\x{2600}-\\x{26FF}\\x{2700}-\\x{27BF}\\x{1F900}-\\x{1F9FF}\\x{1F300}-\\x{1F5FF}\\x{1F680}-\\x{1F6FF}\\x{1F1E0}-\\x{1F1FF}\\x{1F191}-\\x{1F251}\\x{1F600}-\\x{1F64F}\\x{1F680}-\\x{1F6FF}\\x{2600}-\\x{26FF}\\x{2700}-\\x{27BF}\\x{1F300}-\\x{1F5FF}\\x{1F900}-\\x{1F9FF}\\x{1F1E6}-\\x{1F1FF}\\x{1F600}-\\x{1F64F}\\x{1F680}-\\x{1F6FF}\\x{1F918}-\\x{1F9FF}\\x{1F910}-\\x{1F917}\\x{1F980}-\\x{1F984}\\x{1F9C0}]"); Matcher matcher = pattern.matcher(text); while (matcher.find()) { System.out.println("Found emoji: " + matcher.group()); } } } ``` 该代码使用了Unicode编码范围来匹配emoji字符。其中,`\x{1F000}-\x{1F6FF}`表示基本的emoji字符,`\x{2600}-\x{26FF}`和`\x{2700}-\x{27BF}`表示其他符号和图形,`\x{1F900}-\x{1F9FF}`表示补充符号和象形文字,`\x{1F300}-\x{1F5FF}`表示其他符号和象形文字,`\x{1F680}-\x{1F6FF}`表示交通和地图符号,`\x{1F1E0}-\x{1F1FF}`表示国旗,`\x{1F191}-\x{1F251}`表示其他符号(箭头、星号等),`\x{1F600}-\x{1F64F}`表示表情符号,`\x{1F1E6}-\x{1F1FF}`表示国家地区旗帜,`\x{1F918}-\x{1F9FF}`表示人物和身体部位,`\x{1F910}-\x{1F917}`表示表情符号,`\x{1F980}-\x{1F984}`表示食品和饮料,`\x{1F9C0}`表示物品。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值