Java 21 改進的表情符號支持
1. 概述
Java 21 在java.lang.Character
類別中引入了一組新方法,為表情符號提供更好的支援。這些方法使我們能夠輕鬆地檢查某個字元是否是表情符號以及檢查表情符號字元的屬性和特徵。
在本教程中,我們將探索新加入的方法,並演練與 Java 21 中表情符號處理相關的關鍵概念。
2.角色API更新
Java 21 在java.lang.Character
類別中引入了六個與表情符號處理相關的新方法。所有新方法都是static
,採用表示字元的 Unicode 碼點的int
作為參數,並傳回boolean
回應。
Unicode 代碼點是分配給 Unicode 標準中每個字元的唯一數值。它代表不同平台和語言的特定字元。例如,代碼點 U+0041 代表字母“A”,其十六進位形式為 0x0041。
Unicode 聯盟是一家非營利公司,負責維護和開發 Unicode 標準,並提供表情符號及其對應 Unicode 代碼點的完整清單。
現在,讓我們仔細看看這些與表情符號相關的新方法。
2.1. isEmoji()
isEmoji(int codePoint)
方法是新表情符號方法中最基本的。它採用一個表示字元 Unicode 代碼點的int
值,並傳回一個boolean
,指示該字元是否為表情符號。
讓我們來看看它的用法:
String messageWithEmoji = "Hello Java 21! 😄";
String messageWithoutEmoji = "Hello Java!";
assertTrue(messageWithEmoji.codePoints().anyMatch(Character::isEmoji));
assertFalse(messageWithoutEmoji.codePoints().anyMatch(Character::isEmoji));
2.2. isEmojiPresentation()
isEmojiPresentation(int codePoint)
方法決定字元是否應呈現為表情符號。某些字符,例如數字 (0-9) 和貨幣符號($ 或 €),可以根據上下文呈現為表情符號或文字字符。
下面是示範此方法用法的程式碼片段:
String emojiPresentationMessage = "Hello Java 21! 🔥😄";
String nonEmojiPresentationMessage = "Hello Java 21!";
assertTrue(emojiPresentationMessage.codePoints().anyMatch(Character::isEmojiPresentation));
assertFalse(nonEmojiPresentationMessage.codePoints().anyMatch(Character::isEmojiPresentation));
2.3. isEmojiModifier()
isEmojiModifier(int codePoint)
方法檢查字元是否為表情符號修飾符。**表情符號修飾符是可以修改現有表情符號外觀的字符,例如應用膚色變化**。
讓我們看看如何使用此方法來偵測表情符號修飾符:
assertTrue(Character.isEmojiModifier(0x1F3FB)); // light skin tone
assertTrue(Character.isEmojiModifier(0x1F3FD)); // medium skin tone
assertTrue(Character.isEmojiModifier(0x1F3FF)); // dark skin tone
在此測試中,我們使用十六進位形式的 Unicode 代碼點(例如0x1F3FB
)而不是實際的表情符號字符,因為表情符號修飾符通常不會呈現為獨立的表情符號並且缺乏視覺區別。
2.4. isEmojiModifierBase()
isEmojiModifierBase(int codePoint)
方法決定表情符號修飾符是否可以修改給定字元。此方法有助於識別支持修改的表情符號,因為並非所有表情符號都具有此功能。
讓我們看一些例子來更好地理解這一點:
assertTrue(Character.isEmojiModifierBase(Character.codePointAt("👍", 0)));
assertTrue(Character.isEmojiModifierBase(Character.codePointAt("👶", 0)));
assertFalse(Character.isEmojiModifierBase(Character.codePointAt("🍕", 0)));
我們看到,豎起大拇指的表情符號「👍」和嬰兒表情符號「👶」是有效的表情符號修飾符基礎,可以透過應用膚色變化來改變其外觀來表達多樣性。
另一方面,披薩表情符號「🍕」不符合有效的表情符號修飾符基礎,因為它是一個獨立的表情符號,代表一個對象,而不是可以修改其外觀的字元或符號。
2.5. isEmojiComponent()
isEmojiComponent(int codePoint)
方法檢查某個字元是否可以用作元件來建立新的表情符號字元。這些字符通常與其他字符組合形成新的表情符號,而不是作為獨立的表情符號出現。
例如,**零寬度連接符(ZWJ) 字符是一種非列印字符,它向渲染系統指示相鄰字符應顯示為單一表情符號**。透過使用零寬度連接字元( 0x200D
)組合男人「👨」( 0x1F468
)和火箭「🚀」( 0x1F680
)的表情符號,我們可以創建一個太空人「👨🚀」的新表情符號。我們可以使用Unicode 代碼轉換器網站透過輸入進行測試: 0x1F4680x200D0x1F680
。
膚色字元也是表情符號組件。我們可以將深色膚色字符( 0x1F3FF
)與揮手錶情符號“👋”( 0x1F44B
)結合起來,創建一個深色膚色揮手“👋🏿”( 0x1F44B0x1F3FF
)。由於我們修改現有表情符號的外觀而不是創建新表情符號,因此我們不需要使用 ZWJ 角色來更改膚色。
讓我們看一下它的用法並檢測程式碼中的表情符號元件:
assertTrue(Character.isEmojiComponent(0x200D)); // Zero width joiner
assertTrue(Character.isEmojiComponent(0x1F3FD)); // medium skin tone
2.6。 isExtendedPictographic()
isExtendedPictographic(int codePoint)
方法檢查字元是否屬於更廣泛的象形符號類別,其中不僅包括傳統的表情符號,還包括通常由文字處理系統以不同方式呈現的其他符號。
物體、動物和其他圖形符號具有擴展的象形屬性。雖然並不總是被視為典型的表情符號,但它們需要作為表情符號集的一部分進行識別和處理,以確保正確顯示。
下面是一個示範此方法用法的範例:
assertTrue(Character.isExtendedPictographic(Character.codePointAt("☀️", 0))); // Sun with rays
assertTrue(Character.isExtendedPictographic(Character.codePointAt("✔️", 0))); // Checkmark
如果傳遞給isEmojiPresentation()
方法,上述兩個碼點都會傳回false
因為它們是更廣泛的擴展象形文字類別的一部分,但沒有表情符號表示屬性。
3. 正規表示式中的表情符號支持
除了新的 emoji 方法之外, Java 21 還在正規表示式中引入了 emoji 支援。我們現在可以使用\p{IsXXXX}
構造來根據表情符號屬性來匹配字元。
讓我們舉個例子,使用正規表示式搜尋字串中的任何表情符號:
String messageWithEmoji = "Hello Java 21! 😄";
Matcher isEmojiMatcher = Pattern.compile("\\p{IsEmoji}").matcher(messageWithEmoji);
assertTrue(isEmojiMatcher.find());
String messageWithoutEmoji = "Hello Java!";
isEmojiMatcher = Pattern.compile("\\p{IsEmoji}").matcher(messageWithoutEmoji);
assertFalse(isEmojiMatcher.find());
同樣,我們可以在正規表示式中使用其他表情符號結構:
-
IsEmoji_Presentation
-
IsEmoji_Modifier
-
IsEmoji_Modifier_Base
-
IsEmoji_Component
-
IsExtended_Pictographic
值得注意的是,正規表示式屬性建構使用蛇形格式來引用方法。這與Character
類別中的static
方法使用的小駝峰格式不同。
這些正規表示式構造提供了一種乾淨、簡單的方法來搜尋和操作字串中的表情符號字元。
4。
在本文中,我們探討了Java 21 的Character
類別中引入的與表情符號相關的新方法。我們透過查看各種範例來了解這些static
方法的行為。
我們還討論了正規表示式中新新增的表情符號支持,以使用Pattern
類別搜尋表情符號字元及其屬性。
當我們建立聊天應用程式、社交媒體平台或使用表情符號的任何其他類型的應用程式時,這些新功能可以為我們提供幫助。
與往常一樣,本文中使用的所有程式碼範例都可以在 GitHub 上找到。