現一個 Java 21 中有意思的東西! 在java.Lang.Character類中增加了用於確定字元是否為 Emoji 表情符號的 API,主要包含下麵六個新的靜態方法: public static boolean isEmoji(int codePoint) { return Characte ...
現一個 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包含表情");
}
}
除了判斷字元串中是否包含表情符號之外,還能用isEmojiModifier
和isEmojiModifierBase
來判斷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。第一時間瞭解前沿行業消息、分享深度技術乾貨、獲取優質學習資源