You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中检测字符串是否包含表情符号?旧库失效求助

在Java中检测字符串是否包含表情符号(兼容新表情)

如果旧的emoji-java库无法识别新表情(比如🫘这类),完全可以不用依赖第三方库,直接通过Unicode字符范围匹配来实现检测,这种方式能自动兼容后续新增的Unicode表情。

实现方法

写一个简单的工具类,用正则表达式覆盖Unicode中所有表情符号所属的字符区块和类别:

import java.util.regex.Pattern;

public class EmojiDetector {
    // 覆盖主流表情符号的正则规则,包含单个表情、带肤色修饰的表情、国旗等
    private static final Pattern EMOJI_PATTERN = Pattern.compile(
        "[\\p{So}\\p{Sk}\\p{Cs}]|" +
        "[\\uD83C[\\uDF00-\\uDFFF]]|" +
        "[\\uD83D[\\uDC00-\\uDE4F]]|" +
        "[\\uD83D[\\uDE80-\\uDEFF]]|" +
        "[\\uD83E[\\uDD00-\\uDDFF]]|" +
        "[\\uD83D[\\uDC68-\\uDC69][\\uD83C[\\uDFFB-\\uDFFF]]?]|" +
        "[\\uD83C[\\uDDE6-\\uDDFF][\\uD83C[\\uDDE6-\\uDDFF]]]"
    );

    public static boolean containsEmoji(String input) {
        if (input == null || input.isBlank()) {
            return false;
        }
        return EMOJI_PATTERN.matcher(input).find();
    }
}

测试验证

用你之前的Kotlin测试用例验证,现在可以正常识别新表情:

EmojiDetector.containsEmoji("This string contains beans 🫘") shouldBe true

说明

  • 正则中的\p{So}(其他符号)已经包含了大部分新增的表情符号(比如🫘的Unicode编码是U+1FAD8,属于这个类别)
  • 补充的具体区块是为了覆盖一些特殊表情,比如国旗、带肤色修饰的人物表情等
  • 这种方式不需要依赖第三方库,只要Unicode标准更新了表情,只要属于这些字符类别,就能自动识别,不用修改代码

内容的提问来源于stack exchange,提问作者pixel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:22:25