Supprimer les émojis d'une chaîne Java

1. Vue d'ensemble

Les emojis sont de plus en plus populaires dans la messagerie texte ces jours-ci - nous devons parfois nettoyer notre texte d'eux et d'autres symboles.

Dans ce didacticiel, nous aborderons différentes manières de supprimer les émojis d'une chaîne en Java.

2. Utilisation de la bibliothèque Emoji

Tout d'abord, nous utiliserons une bibliothèque d'emojis pour supprimer les emojis de notre chaîne .

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

 com.vdurmont emoji-java 4.0.0 

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

Voyons maintenant comment utiliser emoji-java pour supprimer les emojis 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 () d' EmojiParser .

Nous pouvons également utiliser EmojiParser pour remplacer emoji par ses alias en utilisant 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 les emoji par leurs alias.

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

3. Utilisation d'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 ajoutées à la liste blanche

Cette expression ne conservera que les lettres, les chiffres, la ponctuation et les espaces. Nous pouvons personnaliser l'expression car nous voulons autoriser ou supprimer plus de types de caractères

Nous pouvons également utiliser String.replaceAll () avec le même regex:

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

Maintenant, nous allons également détecter les emojis en utilisant leurs points de code. Nous pouvons utiliser l' expression \ x {valeur hexadécimale} pour correspondre à un point Unicode spécifique.

Dans l'exemple suivant, nous supprimons deux plages Unicode d'émojis à l'aide de 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 emojis actuellement disponibles et de leurs points de code peut être trouvée ici.

6. Utilisation de la plage Unicode

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

Le problème est que certains points Unicode ne tiennent pas dans un seul caractère Java 16 bits, donc certains d'entre eux ont 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]

7. Conclusion

Dans cet article rapide, nous avons appris différentes façons de supprimer les émojis d'une chaîne Java. Nous avons utilisé une bibliothèque d'emojis, des expressions régulières et des plages Unicode.

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