Supprimer les émoticônes d’une chaîne Java

1. Vue d’ensemble

Les Emojis sont de plus en plus populaires dans la messagerie texte de nos jours - nous devons parfois nettoyer notre texte d’eux et d’autres symboles.

Dans ce tutoriel, nous aborderons différentes manières de supprimer les émoticônes d’une chaîne de caractères en Java.

2. Utilisation de la bibliothèque Emoji

Premièrement, nous allons utiliser une bibliothèque emoji pour supprimer les emojis de notre chaîne.

Nous allons utiliser emoji-java dans l’exemple suivant, nous avons donc besoin de cette dépendance à notre pom.xml :

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

La dernière version peut être trouvée here .

Voyons maintenant comment utiliser _emoji-java _ pour supprimer les émoticônes de notre chaîne:

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

Ici, nous appelons la méthode removeAllEmojis () de EmojiParser ** .

Nous pouvons également utiliser EmojiParser pour remplacer emoji par ses alias à l’aide de la méthode parseToAliases () :

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

Notez que l’utilisation de cette bibliothèque est très utile si nous devons remplacer emoji par leurs alias.

Cependant, la bibliothèque emoji-java ne détectera que les émojis, mais ne pourra pas détecter les symboles ou autres caractères spéciaux.

3. Utiliser une expression régulière

Ensuite, nous pouvons utiliser une expression régulière pour supprimer les emojis et autres symboles. Nous n’autoriserons que des types de caractères spécifiques:

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

Décomposons notre expression régulière:

  • \ p \ {L} - pour autoriser toutes les lettres de n’importe quelle langue

  • \ p \ {N} - pour les nombres

  • \ p \ {P} - pour la ponctuation

  • \ p \ {Z} - pour les séparateurs d’espaces

  • ^ est pour la négation, donc toutes ces expressions seront sur liste

  • Cette expression ne conservera que des lettres, des chiffres, des signes de ponctuation et des espaces. ** Nous pouvons personnaliser l’expression si vous souhaitez autoriser ou supprimer plusieurs types de caractères.

Nous pouvons également utiliser String.replaceAll () avec la même expression régulière:

@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. Utilisation de points de code

Nous allons également détecter les émoticônes en utilisant leurs points de code. Nous pouvons utiliser l’expression \ x \ {valeur hexadécimale} pour faire correspondre un point Unicode spécifique.

Dans l’exemple suivant, nous supprimons deux gammes Unicode d’émoticônes en utilisant leurs points Unicode:

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

La liste complète des émojis actuellement disponibles et leurs points de code est disponible à l’adresse here .

6. Utilisation de la plage Unicode

Enfin, nous utiliserons à nouveau Unicode, mais cette fois-ci en utilisant l’expression \ u .

Le problème est que certains points Unicode ne tiennent pas dans un caractère Java 16 bits, certains ont donc besoin de deux caractères.

Voici l’expression correspondante utilisant \ 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. Conclusion

Dans cet article rapide, nous avons appris différentes manières de supprimer les émoticônes d’une chaîne Java. Nous avons utilisé la bibliothèque emoji, les expressions régulières et les gammes Unicode.

Le code source complet des exemples est disponible à l’adresse over sur GitHub .