Skip to content

Commit da2f152

Browse files
committed
Unicode Emoji Methods
1 parent d92656b commit da2f152

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

Diff for: README.md

+8
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@ This repository contains Java examples that are designed to track and document t
99
* [JEP 430](java-21/src/main/java/com/ibrahimatay/JEP430StringTemplates.java): String Templates
1010
* [JEP 431](java-21/src/main/java/com/ibrahimatay/JEP431SequencedCollections.java): Sequenced Collections
1111
* [JEP 444](java-21/src/main/java/com/ibrahimatay/JEP444VirtualThreads.java): Virtual Threads
12+
* API Improvements
13+
* [Unicode Emoji Methods](java-21/src/main/java/com/ibrahimatay/UnicodeEmojiMethods.java)
14+
* `isEmoji(int codePoint)`
15+
* `isEmojiPresentation(int codePoint)`
16+
* `isEmojiModifier(int codePoint)`
17+
* `isEmojiModifierBase(int codePoint)`
18+
* `isEmojiComponent(int codePoint)`
19+
* `isExtendedPictographic(int codePoint)`
1220

1321
* [Java 17](java-17/) (September, 2021)
1422
* [JEP 409](java-17/src/main/java/com/ibrahimatay/JEP409SealedClasses.java): Sealed Classes
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.ibrahimatay;
2+
3+
import java.util.OptionalInt;
4+
import java.util.regex.Matcher;
5+
import java.util.regex.Pattern;
6+
7+
public class UnicodeEmojiMethods {
8+
9+
// Unicode Emoji Properties
10+
// https://bugs.openjdk.org/browse/JDK-8303018
11+
12+
// JDK 21 JavaDoc for java.lang.Character
13+
// https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html
14+
15+
// Unicode® Technical Standard #Emoji Character Properties
16+
// https://unicode.org/reports/tr51/#Emoji_Properties_and_Data_Files
17+
18+
public static void main(String[] args) {
19+
String welcomeMsg = "Hey Java Developers! ☕️";
20+
21+
if(welcomeMsg.codePoints().anyMatch(Character::isEmoji)) {
22+
System.out.println("Message contains an emoji!");
23+
}
24+
25+
Matcher matcher = Pattern.compile("\\p{IsEmoji}").matcher(welcomeMsg);
26+
if(matcher.find()) {
27+
System.out.println("Message contains an emoji!");
28+
}
29+
30+
Matcher matcher_modifier_base = Pattern.compile("\\p{IsEmoji_Modifier_Base}").matcher(welcomeMsg);
31+
if(matcher_modifier_base.find()) {
32+
System.out.println("Message contains an emoji modifier base!");
33+
}
34+
35+
OptionalInt emojiOptional = welcomeMsg.codePoints().filter(Character::isEmoji).findFirst();
36+
if (emojiOptional.isPresent()) {
37+
int emojiCodePoint = emojiOptional.getAsInt();
38+
if (Character.isEmojiModifierBase(emojiCodePoint)) {
39+
System.out.println("Emoji can be modified");
40+
if (Character.isEmojiModifier(emojiCodePoint)) {
41+
System.out.println("Emoji is modified");
42+
} else {
43+
System.out.println("Emoji has not been modified");
44+
}
45+
} else {
46+
System.out.println("Emoji cannot be modified");
47+
}
48+
} else {
49+
System.out.println("No emoji");
50+
}
51+
}
52+
}

0 commit comments

Comments
 (0)