ToB企服应用市场:ToB评测及商务社交产业平台

标题: Java 21增强对Emoji表情符号的处理了 [打印本页]

作者: 玛卡巴卡的卡巴卡玛    时间: 2024-1-8 05:05
标题: Java 21增强对Emoji表情符号的处理了
现一个 Java 21 中有意思的东西!
在java.Lang.Character类中增加了用于确定字符是否为 Emoji 表情符号的 API,主要包含下面六个新的静态方法:
  1. public static boolean isEmoji(int codePoint) {
  2.   return CharacterData.of(codePoint).isEmoji(codePoint);
  3. }
  4. public static boolean isEmojiPresentation(int codePoint) {
  5.   return CharacterData.of(codePoint).isEmojiPresentation(codePoint);
  6. }
  7. public static boolean isEmojiModifier(int codePoint) {
  8.   return CharacterData.of(codePoint).isEmojiModifier(codePoint);
  9. }
  10. public static boolean isEmojiModifierBase(int codePoint) {
  11.   return CharacterData.of(codePoint).isEmojiModifierBase(codePoint);
  12. }
  13.   
  14. public static boolean isEmojiComponent(int codePoint) {
  15.   return CharacterData.of(codePoint).isEmojiComponent(codePoint);
  16. }
  17. public static boolean isExtendedPictographic(int codePoint) {
  18.   return CharacterData.of(codePoint).isExtendedPictographic(codePoint);
  19. }
复制代码
这些静态方法通过接收字符的codePoint来判断是否为表情符号来返回boolean值。
所以,我们可以用isEmoji方法来判断字符串中是否有表情,比如:
  1. @Test
  2. void testEmoji() {
  3.   String message = "欢迎来到 www.didispace.com ❤️,要不要来杯 ☕️ ?";
  4.   if(message.codePoints().anyMatch(Character::isEmoji)) {
  5.     System.out.println("Message包含表情");
  6.   }
  7. }
复制代码
除了判断字符串中是否包含表情符号之外,还能用isEmojiModifier和isEmojiModifierBase来判断Emoji是否被修改和是否可以被修改:
  1. @Test
  2. void testEmoji2() {
  3.   String welcomeMsg ="欢迎来到 www.didispace.com ❤️,要不要来杯 ☕️ ?";
  4.   OptionalInt emojiOptional = welcomeMsg.codePoints().filter(Character::isEmoji).findFirst();
  5.   if (emojiOptional.isPresent()) {
  6.     int emojiCodePoint = emojiOptional.getAsInt();
  7.     if (Character.isEmojiModifierBase(emojiCodePoint)) {
  8.       System.out.println("Emoji can be modified");
  9.       if (Character.isEmojiModifier(emojiCodePoint))
  10.         System.out.println("Emoji is modified");
  11.       else
  12.         System.out.println("Emoji has not been modified");
  13.     } else
  14.       System.out.println("Emoji cannot be modified");
  15.   } else
  16.     System.out.println("No emoji present");
  17. }
复制代码
使用正则表达式

这些新方法也可以通过属性构造正则表达式来使用,比如:
  1. String welcomeMsg = "欢迎来到 www.didispace.com ❤️,要不要来杯 ☕️ ?";
  2. Matcher matcher = Pattern.compile("\\p{IsEmoji}").matcher(welcomeMsg);
  3. if(matcher.find()) {
  4.         System.out.println("Message contains an emoji!");
  5. }
  6. matcher = Pattern.compile("\\p{IsEmoji_Modifier_Base}").matcher(welcomeMsg);
  7. if(matcher.find()) {
  8.         System.out.println("Message contains an emoji modifier base!");
  9. }
复制代码
如果您学习过程中如遇困难?可以加入我们超高质量的技术交流群,参与交流与讨论,更好的学习与进步!另外,不要走开,关注我!持续更新Java新特性专栏
欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4