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:
- unicode.org for all unicode emojis
- EmojiTerra for additional information about emojis like aliases
- discord-emoji by Emzi0767 for additional information about emojis for Discord
๐ฆ 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 the order they appear
List<Emoji> emojis=EmojiManager.extractEmojisInOrder("Hello ๐ World ๐"); // [๐, ๐]
Extract all emojis from a string in the order they appear, with their found index
List<IndexedEmoji> emojis=EmojiManager.extractEmojisInOrderWithIndex("Hello ๐ World ๐");
emojis.get(0).getCharIndex() // Prints "6"
emojis.get(0).getCodePointIndex() // Prints "6"
emojis.get(1).getCharIndex() // Prints "15"
emojis.get(1).getCodePointIndex() // Prints "14"
emojis.get(0).getEmoji() // Gets the Emoji object
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 😀 World 👍"
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
}
๐ Benchmarks
On every push on the master branch, a benchmark will be executed and automatically deployed to this projects GitHub pages. These benchmarks are executed on GitHub runners and therefore are not very accurate and can differ a bit since this library measures benchmarks in single digit milliseconds range or even below. They are generally okay to measure large differences if something bad got pushed but are not as reliable as the results of benchmark table below which are always executed on the specified specs.
Benchmark | Mode | Cnt | Score** | Error | Units |
---|---|---|---|---|---|
getByAlias -> :+1: |
avgt | 10 | 59,509 | ยฑ 0,608 | ns/op |
getByAlias -> nope |
avgt | 10 | 72,004 | ยฑ 0,546 | ns/op |
containsEmoji | avgt | 10 | 1,403 | ยฑ 0,004 | ms/op |
extractEmojisInOrder | avgt | 10 | 1,382 | ยฑ 0,013 | ms/op |
extractEmojisInOrderOnlyEmojisLengthDescending | avgt | 10 | 6,013 | ยฑ 0,022 | ms/op |
extractEmojisInOrderOnlyEmojisRandomOrder | avgt | 10 | 6,614 | ยฑ 0,045 | ms/op |
extractEmojisInOrderWithIndex | avgt | 10 | 1,814 | ยฑ 0,002 | ms/op |
removeAllEmojis | avgt | 10 | 2,264 | ยฑ 0,370 | ms/op |
replaceAllEmojis | avgt | 10 | 2,517 | ยฑ 0,020 | ms/op |
replaceAllEmojisFunction | avgt | 10 | 2,502 | ยฑ 0,023 | 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.