Java 21增强对Emoji表情符号的处理了

现一个 Java 21 中有意思的东西!

java.Lang.Character类中增加了用于确定字符是否为 Emoji 表情符号的 API,主要包含下面六个新的静态方法:

java 复制代码
public static boolean isEmoji(int codePoint) {
  return CharacterData.of(codePoint).isEmoji(codePoint);
}

public static boolean isEmojiPresentation(int codePoint) {
  return CharacterData.of(codePoint).isEmojiPresentation(codePoint);
}

public static boolean isEmojiModifier(int codePoint) {
  return CharacterData.of(codePoint).isEmojiModifier(codePoint);
}

public static boolean isEmojiModifierBase(int codePoint) {
  return CharacterData.of(codePoint).isEmojiModifierBase(codePoint);
}
  
public static boolean isEmojiComponent(int codePoint) {
  return CharacterData.of(codePoint).isEmojiComponent(codePoint);
}

public static boolean isExtendedPictographic(int codePoint) {
  return CharacterData.of(codePoint).isExtendedPictographic(codePoint);
}

这些静态方法通过接收字符的codePoint来判断是否为表情符号来返回boolean值。

所以,我们可以用isEmoji方法来判断字符串中是否有表情,比如:

java 复制代码
@Test
void testEmoji() {
  String message = "欢迎来到 www.didispace.com ❤️,要不要来杯 ☕️ ?";
  if(message.codePoints().anyMatch(Character::isEmoji)) {
    System.out.println("Message包含表情");
  }
}

除了判断字符串中是否包含表情符号之外,还能用isEmojiModifierisEmojiModifierBase来判断Emoji是否被修改和是否可以被修改:

java 复制代码
@Test
void testEmoji2() {
  String welcomeMsg ="欢迎来到 www.didispace.com ❤️,要不要来杯 ☕️ ?";
  OptionalInt emojiOptional = welcomeMsg.codePoints().filter(Character::isEmoji).findFirst();
  if (emojiOptional.isPresent()) {
    int emojiCodePoint = emojiOptional.getAsInt();
    if (Character.isEmojiModifierBase(emojiCodePoint)) {
      System.out.println("Emoji can be modified");
      if (Character.isEmojiModifier(emojiCodePoint))
        System.out.println("Emoji is modified");
      else
        System.out.println("Emoji has not been modified");
    } else
      System.out.println("Emoji cannot be modified");
  } else
    System.out.println("No emoji present");
}

使用正则表达式

这些新方法也可以通过属性构造正则表达式来使用,比如:

java 复制代码
String welcomeMsg = "欢迎来到 www.didispace.com ❤️,要不要来杯 ☕️ ?";

Matcher matcher = Pattern.compile("\\p{IsEmoji}").matcher(welcomeMsg);

if(matcher.find()) {
	System.out.println("Message contains an emoji!");
}

matcher = Pattern.compile("\\p{IsEmoji_Modifier_Base}").matcher(welcomeMsg);

if(matcher.find()) {
	System.out.println("Message contains an emoji modifier base!");
}

如果您学习过程中如遇困难?可以加入我们超高质量的技术交流群,参与交流与讨论,更好的学习与进步!另外,不要走开,关注我!持续更新Java新特性专栏

欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

相关推荐
晴子呀1 分钟前
Spring底层原理大致脉络
java·后端·spring
只吹45°风8 分钟前
Java-ArrayList和LinkedList区别
java·arraylist·linkedlist·区别
阿华的代码王国15 分钟前
【JavaEE】多线程编程引入——认识Thread类
java·开发语言·数据结构·mysql·java-ee
黑蛋同志16 分钟前
array和linked list的区别
java
andrew_121922 分钟前
腾讯 IEG 游戏前沿技术 一面复盘
java·redis·sql·面试
寻求出路的程序媛29 分钟前
JVM —— 类加载器的分类,双亲委派机制
java·jvm·面试
这孩子叫逆31 分钟前
35. MyBatis中的缓存失效机制是如何工作的?
java·spring·mybatis
骆晨学长32 分钟前
基于SpringBoot的校园失物招领系统
java·spring boot
汇匠源32 分钟前
零工市场小程序:保障灵活就业
java·小程序·零工市场
计算机编程-吉哥35 分钟前
计算机毕业设计 二手图书交易系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
java·spring boot·毕业设计·毕业论文·计算机毕业设计选题·计算机毕业设计开题报告·二手图书交易系统