/JEmoji

Java Emoji (JEmoji) is a lightweight fast emoji library for Java with the purpose to improve and ease working with emojis

Primary LanguageJavaApache License 2.0Apache-2.0

Unicode Emoji Version Maven Central GitHub

Java Emoji (JEmoji)

JEmoji is a lightweight and fast emoji library for Java with a complete list of all emojis from the unicode consortium.

โ“ Why another emoji library?

While several other emoji libraries for Java exist, most of them are incomplete or outdated. JEmoji, on the other hand, offers a complete list of all emojis from the Unicode Consortium, which can be generated quickly and easily with just one task. This is a major advantage over other libraries that may be no longer maintained or require extensive manual work to update their emoji lists.

In addition, the data is fetched from multiple sources to ensure that information about each emoji is enhanced as much as possible.

Fetched sources:

๐Ÿ“ฆ Installation

Replace the VERSION with the latest version shown at the start of the README

Gradle Kotlin DSL

implementation("net.fellbaum:jemoji:VERSION")

Maven

<dependency>
    <groupId>net.fellbaum</groupId>
    <artifactId>jemoji</artifactId>
    <version>VERSION</version>
</dependency>

๐Ÿ“ Usage

EmojiManager

Get all emojis

Set<Emoji> emojis = EmojiManager.getAllEmojis();

Get emoji by unicode string

Optional<Emoji> emoji = EmojiManager.getEmoji("๐Ÿ˜€");

Get emoji by alias

Optional<Emoji> emoji = EmojiManager.getByAlias("smile");
// or
Optional<Emoji> emoji = EmojiManager.getByAlias(":smile:");

Get all emojis by group (general category of emojis)

Set<Emoji> emojis = EmojiManager.getAllEmojisByGroup(EmojiGroup.SMILEYS_AND_EMOTION);

Get all emojis by subgroup (more specific set of emojis)

Set<Emoji> emojis = EmojiManager.getAllEmojisBySubGroup(EmojiSubGroup.ANIMAL_BIRD);

Check if the provided string is an emoji

boolean isEmoji = EmojiManager.isEmoji("๐Ÿ˜€");

Check if the provided string contains an emoji

boolean containsEmoji = EmojiManager.containsEmoji("Hello ๐Ÿ˜€ World");

Extract all emojis from a string in order they appear

List<Emoji> emojis = EmojiManager.extractEmojisInOrder("Hello ๐Ÿ˜€ World ๐Ÿ‘"); // [๐Ÿ˜€, ๐Ÿ‘]

Remove all emojis from a string

String text = EmojiManager.removeAllEmojis("Hello ๐Ÿ˜€ World ๐Ÿ‘"); // "Hello  World "

Remove specific emojis from a string

String text = EmojiManager.removeEmojis("Hello ๐Ÿ˜€ World ๐Ÿ‘", EmojiManager.getEmoji("๐Ÿ˜€").orElseThrow(RuntimeException::new)); // "Hello  World ๐Ÿ‘"

Replace all emojis in a string

String text = EmojiManager.replaceAllEmojis("Hello ๐Ÿ˜€ World ๐Ÿ‘","<an emoji was here>"); // "Hello <an emoji was here> World <an emoji was here>"
//or more control of the replacement with a Function that provides the emoji and wants a string as return value
String text = EmojiManager.replaceAllEmojis("Hello ๐Ÿ˜€ World ๐Ÿ‘", Emoji::getHtmlDecimalCode); // "Hello &#128512; World &#128077;"

Replace specific emojis in a string

String text = EmojiManager.replaceEmojis("Hello ๐Ÿ˜€ World ๐Ÿ‘", "<an emoji was here>", EmojiManager.getEmoji("๐Ÿ˜€").orElseThrow(RuntimeException::new)); // "Hello <an emoji was here> World ๐Ÿ‘"

Emoji Object

classDiagram
direction BT
class Emoji {
+ getEmoji() String
+ getUnicode() String
+ getHtmlDecimalCode() String
+ getHtmlHexadecimalCode() String
+ getURLEncoded() String
+ getVariations() List~Emoji~
+ getDiscordAliases() List~String~
+ getGithubAliases() List~String~
+ getSlackAliases() List~String~
+ getAllAliases() List~String~
+ hasFitzpatrickComponent() boolean
+ hasHairStyleComponent() boolean
+ getVersion() double
+ getQualification() Qualification
+ getDescription() String
+ getGroup() EmojiGroup
+ getSubGroup() EmojiSubGroup
}
Loading

๐Ÿš€ Benchmarks

Benchmark Mode Cnt Score** Error Units
containsEmoji avgt 10 4,820 ยฑ 0,051 ms/op
extractEmojisInOrder avgt 10 4,841 ยฑ 0,579 ms/op
extractEmojisInOrderOnlyEmojisLengthDescending avgt 10 8,967 ยฑ 0,054 ms/op
extractEmojisInOrderOnlyEmojisRandomOrder avgt 10 9,364 ยฑ 0,081 ms/op
removeAllEmojis avgt 10 7,813 ยฑ 0,454 ms/op
replaceAllEmojis avgt 10 7,213 ยฑ 0,043 ms/op
Click to see the benchmark details

CPU: Intelยฎ Coreโ„ข i7-13700K

VM version: JDK 1.8.0_372, OpenJDK 64-Bit Server VM, 25.372-b07

Blackhole mode: full + dont-inline hint (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)

Warmup: 5 iterations, 10 s each

Measurement: 5 iterations, 10 s each

Timeout: 10 min per iteration

Threads: 1 thread, will synchronize iterations

Benchmark mode: Average time, time/op

** Score depends on many factors like text size and emoji count if used as an argument. For this benchmark relatively large files were used. Click Here to see the benchmark code and resources.

๐Ÿ’พ Emoji JSON list Generation

The emoji list can be easily generated with the generateEmojis Gradle task. The generated list will be saved in the src/main/resources folder.