Entfernen Sie Emojis aus einem Java-String

1. Überblick

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

In diesem Lernprogramm werden verschiedene Methoden 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 verwenden emoji-java im folgenden Beispiel, daher müssen wir diese Abhängigkeit von unserer pom.xml haben:

<dependency>
    <groupId>com.vdurmont</groupId>
    <artifactId>emoji-java</artifactId>
    <version>4.0.0</version>
</dependency>

Die neueste Version finden Sie unter 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 **

Wir können EmojiParser auch verwenden, um Emoji durch seine Aliasnamen mit der parseToAliases () -Methode 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 Sie 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 Zeichenarten:

@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 ");
}

Brechen wir unseren regulären Ausdruck auf:

  • \ p \ {L} - um alle Buchstaben aus beliebigen Sprachen zuzulassen

  • \ p \ {N} - für Zahlen

  • \ p \ {P} - für Interpunktion

  • \ p \ {Z} - für Leerzeichen-Trennzeichen

  • ^ ist für die Negation, daher werden alle diese Ausdrücke in die Whitelist aufgenommen

  • Dieser Ausdruck enthält nur Buchstaben, Zahlen, Interpunktionszeichen und Leerzeichen. ** Wir können den Ausdruck anpassen, da weitere Zeichentypen zugelassen oder entfernt werden sollen

Wir können String.replaceAll () auch mit derselben Regex 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. Code-Punkte verwenden

Jetzt werden wir auch Emojis anhand ihrer Codepunkte erkennen. Wir können \ x \ {Hexadezimalwert} Ausdruck verwenden, um einen bestimmten Unicode-Punkt abzugleichen.

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 ihre Codepunkte finden Sie unter https://unicode.org/emoji/charts/full-emoji-list.html (hier).

6. Verwenden des Unicode-Bereichs

Schließlich verwenden 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]|[\ud83d\ude80-\ud83d\udeff]", "");

    assertEquals(result, "la conférence, commencera à 10 heures ");
}

7. Fazit

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

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