带表情符号的节日问候
发布时间:2023-12-23 12:24 PM(最后更新:2024-01-19 10:15 PM)
在上一篇博文中,我们探讨了一种使用 Groovy 和表情符号编写“hello world”脚本的有趣方式。
让我们看看 JDK 21 中可用的其他表情符号 API 调用。我们使用的是 Groovy 5.0.0-alpha-5,但大多数示例在最新的 Groovy 4 版本中也同样适用。Groovy 5 增加了一个快捷方式,可以更轻松地将码点作为数组获取。
JDK 21 新特性
作为 JDK-8303018 的一部分,JDK 21 向 java.lang.Character
添加了以下 API 调用:
public static boolean isEmoji(int codePoint)
public static boolean isEmojiPresentation(int codePoint)
public static boolean isEmojiModifier(int codePoint)
public static boolean isEmojiModifierBase(int codePoint)
public static boolean isEmojiComponent(int codePoint)
public static boolean isExtendedPictographic(int codePoint)
在执行正则表达式匹配时,还添加了使用以下特殊二进制属性的等效功能:
-
\p{IsEmoji}
-
\p{IsEmoji_Presentation}
-
\p{IsEmoji_Modifier}
-
\p{IsEmoji_Modifier_Base}
-
\p{IsEmoji_Component}
-
\p{IsExtended_Pictographic}
让我们看看如何在 Groovy 中使用这些功能。
使用 Groovy 玩转表情符号
首先,我们将看一个包含 3 个表情符号的字符串:一棵圣诞树、圣诞夫人和圣诞老人。我们将使用其中一个新的 API 调用检查该字符串的 3 个 Unicode 码点是否都对应于表情符号。
我们也可以使用新添加的正则表达式二进制属性进行检查。Groovy 正则表达式运算符(==~
)确保字符串完全匹配 3 个表情符号。
Unicode 通过对 Unicode 字符进行排序来支持各种形式的修改。最简单的例子之一是当一些“基本”表情符号字符后跟一个肤色表情符号修饰符时。这两个连续的字符被重新解释,产生一个带有肤色的单一表情符号。
我们将看到圣诞树不能用作表情符号修饰符基,但两个克劳斯表情符号可以。此外,我们可以看到所有 5 种肤色表情符号字符都可以用作表情符号修饰符。
让我们尝试一些组合。我们将圣诞老人表情符号与一些肤色组合。根据您的 IDE/编辑器,您可能会看到一个单一的表情符号,但它由多个 Unicode 码点组成。
如果我们查看“单一”表情符号的码点,它将与“裸露”的圣诞老人表情符号加上肤色表情符号的码点相同。
我们还在使用正则表达式检查表情符号的角色。我们可以看到基础后跟修饰符。
我们可以将所有这些结合起来,如下所示检查所有五个带肤色的圣诞老人:
Unicode 提供的另一个排序技巧是结合相关表情符号,并插入一个零宽度连接符(ZWJ)来形成新的表情符号。例如,您可以组合女性表情符号“👩”,可能再添加一个肤色表情符号,然后是一个 ZWJ 字符(Unicode 200D 的十六进制),然后是火箭表情符号“🚀”,组合后得到一个女性宇航员表情符号“👩🏽🚀”。
Unicode 有一个特殊的 Mx Claus 表情符号,可用于表示圣诞夫人或圣诞老人的中性替代,或表示一个具有强烈圣诞精神的人。它结合了成人表情符号“🧑”、ZWJ 字符和圣诞树表情符号。
同样,如果我们查看码点,“组合”表情符号的码点只是各个组件的码点一个接一个,正如我们在第一行中看到的那样。第二行显示了如何使用 Unicode 输入组合表情符号。第一个和最后一个部分表示为代理对,它们会自动组合成正确的码点。
最后两行显示使用正则表达式检查组合表情符号。我们可以使用正则表达式的 \x{…}
符号检查确切的 Unicode 字符,注意我们不使用代理对。我们还可以使用 \N{…}
符号检查表情符号名称。
组合不限于两个。其中一种可能的“家庭”表情符号组合将 3 个表情符号与交错的 ZWJ 字符组合在一起。
我们可以像以前一样进行类似的正则表达式检查,检查确切的 Unicode 值或名称。
作为最后一个例子,让我们看看“🙋🏻♀️”表情符号。查看下面代码的第一行可能会让我们认为我们组合了三个字符,但检查大小显示组合表情符号有 5 个部分。第一个和最后一个表情符号已经是组合。 “🙋🏻”表情符号结合了基本表情符号和肤色。 “♀️”表情符号结合了女性符号字符“♀”和特殊的变体选择符字符,该字符表示前一个字符应被视为表情符号而不是字符。
我们可以通过检查组合表情符号每个部分的各种属性来测试新的表情符号 API 调用。
我们可以使用正则表达式进行类似的检查。我们可以精确地检查 Unicode 字符的精确匹配,按其表情符号名称,或按其扮演的角色,如下所示:
希望您喜欢这次对 JDK 21 新表情符号功能的小探索。
哦,是的,祝大家节日快乐 🎄🎅☃️🎁🌟🎉!