Entfernen Sie Emojis aus einem Java-String

1. Übersicht

Emojis werden heutzutage in Textnachrichten immer beliebter - manchmal müssen wir unseren Text von ihnen und anderen Symbolen entfernen.

In diesem Tutorial werden verschiedene Möglichkeiten zum Entfernen von Emojis aus einem String in Java erläutert .

2. Verwenden der Emoji-Bibliothek

Zuerst verwenden wir eine Emoji-Bibliothek, um die Emojis aus unserem String zu entfernen .

Wir werden im folgenden Beispiel Emoji-Java verwenden , daher müssen wir diese Abhängigkeit von unserer pom.xml haben :

 com.vdurmont emoji-java 4.0.0 

Die neueste Version finden Sie hier.

Nun wollen wir sehen, wie man Emoji-Java verwendet , um Emojis aus unserem String zu entfernen :

@Test public void whenRemoveEmojiUsingLibrary_thenSuccess() { String text = "la conférence, commencera à 10 heures ?"; String result = EmojiParser.removeAllEmojis(text); assertEquals(result, "la conférence, commencera à 10 heures "); }

Hier rufen wir die removeAllEmojis () -Methode von EmojiParser auf .

Wir können EmojiParser auch verwenden , um Emoji mithilfe der parseToAliases () -Methode durch seine Aliase zu ersetzen :

@Test public void whenReplaceEmojiUsingLibrary_thenSuccess() { String text = "la conférence, commencera à 10 heures ?"; String result = EmojiParser.parseToAliases(text); assertEquals( result, "la conférence, commencera à 10 heures :sweat_smile:"); }

Beachten Sie, dass die Verwendung dieser Bibliothek sehr nützlich ist, wenn wir Emoji durch ihre Aliase ersetzen müssen.

Die Emoji-Java-Bibliothek erkennt jedoch nur Emojis, kann jedoch keine Symbole oder andere Sonderzeichen erkennen.

3. Verwenden eines regulären Ausdrucks

Als nächstes können wir einen regulären Ausdruck verwenden, um Emojis und andere Symbole zu entfernen.

Wir erlauben nur bestimmte Arten von Zeichen:

@Test public void whenRemoveEmojiUsingMatcher_thenSuccess() { String text = "la conférence, commencera à 10 heures ?"; String regex = "[^\\p{L}\\p{N}\\p{P}\\p{Z}]"; Pattern pattern = Pattern.compile( regex, Pattern.UNICODE_CHARACTER_CLASS); Matcher matcher = pattern.matcher(text); String result = matcher.replaceAll(""); assertEquals(result, "la conférence, commencera à 10 heures "); }

Lassen Sie uns unseren regulären Ausdruck aufschlüsseln:

  • \ p {L} - um alle Buchstaben aus einer beliebigen Sprache zuzulassen
  • \ p {N} - für Zahlen
  • \ p {P} - zur Interpunktion
  • \ p {Z} - für Leerzeichen
  • ^ ist für die Negation, daher werden alle diese Ausdrücke in die Whitelist aufgenommen

Dieser Ausdruck enthält nur Buchstaben, Zahlen, Satzzeichen und Leerzeichen. Wir können den Ausdruck anpassen, wenn wir weitere Zeichentypen zulassen oder entfernen möchten

Wir können auch String.replaceAll () mit demselben regulären Ausdruck verwenden :

@Test public void whenRemoveEmojiUsingRegex_thenSuccess() { String text = "la conférence, commencera à 10 heures ?"; String regex = "[^\\p{L}\\p{N}\\p{P}\\p{Z}]"; String result = text.replaceAll(regex, ""); assertEquals(result, "la conférence, commencera à 10 heures "); }

5. Verwenden von Codepunkten

Jetzt erkennen wir Emojis auch anhand ihrer Codepunkte. Wir können den Ausdruck \ x {Hexadezimalwert} verwenden, um einem bestimmten Unicode-Punkt zu entsprechen.

Im folgenden Beispiel entfernen wir zwei Unicode-Bereiche von Emojis mithilfe ihrer Unicode-Punkte:

@Test public void whenRemoveEmojiUsingCodepoints_thenSuccess() { String text = "la conférence, commencera à 10 heures ?"; String result = text.replaceAll("[\\x{0001f300}-\\x{0001f64f}]|[\\x{0001f680}-\\x{0001f6ff}]", ""); assertEquals(result, "la conférence, commencera à 10 heures "); }

Die vollständige Liste der derzeit verfügbaren Emojis und ihrer Codepunkte finden Sie hier.

6. Verwenden des Unicode-Bereichs

Schließlich werden wir wieder Unicode verwenden, diesmal jedoch den Ausdruck \ u .

Das Problem ist, dass einige Unicode-Punkte nicht in ein 16-Bit-Java-Zeichen passen, sodass einige von ihnen zwei Zeichen benötigen.

Hier ist der entsprechende Ausdruck mit \ u :

@Test public void whenRemoveEmojiUsingUnicode_thenSuccess()  String text = "la conférence, commencera à 10 heures ?"; String result = text.replaceAll("[\ud83c\udf00-\ud83d\ude4f]

7. Fazit

In diesem kurzen Artikel haben wir verschiedene Methoden zum Entfernen von Emojis aus einem Java-String kennengelernt. Wir haben Emoji-Bibliothek, reguläre Ausdrücke und Unicode-Bereiche verwendet.

Den vollständigen Quellcode für die Beispiele finden Sie auf GitHub.