首页 > 编程语言 >Java 21增强对Emoji表情符号的处理了

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

时间:2023-11-23 17:57:38浏览次数:42  
标签:表情符号 codePoint Java 21 System boolean println Emoji out

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

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

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方法来判断字符串中是否有表情,比如:

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

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

@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");
}

使用正则表达式

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

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。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

标签:表情符号,codePoint,Java,21,System,boolean,println,Emoji,out
From: https://www.cnblogs.com/didispace/p/17852143.html

相关文章

  • JavaScript字符串函数,都在这里了
    先来一波JavaScript提供了许多内置的字符串函数,用于处理和操作字符串。下面是一些常用的字符串函数的总结:length:返回字符串的长度。varstr="Hello";varlen=str.length;//返回5concat:将多个字符串连接起来。varstr1="Hello";varstr2="World";varresul......
  • 学习笔记11—20211303
    一、学习任务自学教材第13章,提交学习笔记(10分),评分标准如下1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”核心是要求GPT:......
  • JAVA-PDF多文件合并
     /****多个pdf文件合并为一个pdf文件*@ClassnameMulFileToOneUtils*@DescriptionTODO*@Date2023/6/140014下午2:01*@CreatedbyAdministrator*/publicclassMulFileToOneUtils{publicstaticFileMulFileToOne(List<File>files,Stringt......
  • 秦疆的Java课程笔记:37 流程控制 switch选择结构
    多选择结构还有一个实现方式就是switchcase语句。switchcase语句判断一个变量与一系列值中某个值是否相等,每个值为一个分支。if判断区间,switch匹配一个具体的值。语法:switch(expression){ casevalue: //语句 break;//可选 casevalue: //语句 break;//可选 ......
  • Java Runtime (class file version 61.0), this version of the Java Runtime only re
    转: https://blog.csdn.net/qq_26898033/article/details/1289155001错误信息org/springframework/boot/maven/BuildInfoMojohasbeencopiledbyamorerecentversionoftheJavaRuntime(classfileversion61.0),thisversionoftheJavaRuntimeonlyrecogniz......
  • Java登陆第十二天——网络编程(一)网络的概念
    网络由两台或者更多的计算机组成的网络,称之为计算机网络。在同一个网络中,不同的计算机可以互相通信。因为他们使用的都是相同的协议。(通信:两台设备之间通过网络实现数据传输。)假设某处的一个计算机网络使用的网络协议为ABC。那么另一处网络协议为EFG的计算机网络,就无法与该A......
  • 20211325 2023-2024-1 《信息安全系统设计与实现(上)》第十一周学习笔记
    202113252023-2024-1《信息安全系统设计与实现(上)》第十一周学习笔记一、任务要求自学教材第13章,提交学习笔记(10分),评分标准如下1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X......
  • java 实现文件夹上传(springBoot 框架)
    java实现文件夹上传(springBoot框架)有时我们后台管理等服务可能会有这样一个简单需求,就是根据文件夹将整个文件夹下的所有资源都上传到我们的服务器上,本人也是搜索了大量资料,最终以最简单便捷的方式实现该功能,具体操作步骤如下一、前端如何设置上传组件并将资源上传到后台服务这......
  • SWITCH/Java switch case 语句
    SWITCHcaseswitch语句中的变量类型可以是:byte、short、int或者char。从JavaSE7开始,switch支持字符串String类型了,同时case标签必须为字符串常量或字面量。当变量的值与case语句的值相等时,那么case语句之后的语句开始执行,直到break语句出现才会跳出swit......
  • 秦疆的Java课程笔记:36 流程控制 if选择结构
    if单选择结构很多时候需要去判断一个东西是否可行,然后才去执行这丫那个一个过程在程序中用if语句来表示。语法:if(布尔表达式){ //如果布尔表达式为true将执行语句}importjava.util.Scanner;publicclassIfDemo1{publicstaticvoidmain(String[]args){......