Rimuovi Emoji da una stringa Java

1. Panoramica

Gli emoji stanno diventando sempre più popolari nei messaggi di testo in questi giorni: a volte dobbiamo pulire il nostro testo da essi e da altri simboli.

In questo tutorial, discuteremo diversi modi per rimuovere gli emoji da una stringa in Java.

2. Utilizzo della libreria Emoji

Innanzitutto, utilizzeremo una libreria di emoji per rimuovere gli emoji dalla nostra stringa .

Useremo emoji-java nel seguente esempio, quindi abbiamo bisogno di questa dipendenza dal nostro pom.xml :

 com.vdurmont emoji-java 4.0.0 

L'ultima versione può essere trovata qui.

Ora vediamo come usare emoji-java per rimuovere emoji dalla nostra stringa :

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

Qui, stiamo chiamando il metodo removeAllEmojis () di EmojiParser .

Possiamo anche usare EmojiParser per sostituire emoji con i suoi alias usando il metodo 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:"); }

Nota che l'utilizzo di questa libreria è molto utile se dobbiamo sostituire le emoji con i loro alias.

Tuttavia, la libreria emoji-java rileverà solo gli emoji, ma non sarà in grado di rilevare simboli o altri caratteri speciali.

3. Utilizzo di un'espressione regolare

Successivamente, possiamo utilizzare un'espressione regolare per rimuovere emoji e altri simboli.

Consentiremo solo tipi di caratteri specifici:

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

Analizziamo la nostra espressione regolare:

  • \ p {L} - per consentire tutte le lettere di qualsiasi lingua
  • \ p {N} - per i numeri
  • \ p {P} - per la punteggiatura
  • \ p {Z} - per i separatori di spazi
  • ^ è per la negazione, quindi tutte queste espressioni verranno inserite nella whitelist

Questa espressione manterrà solo lettere, numeri, punteggiatura e spazi bianchi. Possiamo personalizzare l'espressione come vogliamo consentire o rimuovere più tipi di carattere

Possiamo anche usare String.replaceAll () con la stessa 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. Utilizzo di punti codice

Ora rileveremo anche gli emoji usando i loro punti di codice. Possiamo usare l' espressione \ x {valore esadecimale} per trovare una corrispondenza con un punto Unicode specifico.

Nell'esempio seguente, rimuoviamo due intervalli Unicode di emoji utilizzando i loro punti 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 "); }

L'elenco completo degli emoji attualmente disponibili e dei loro punti di codice può essere trovato qui.

6. Utilizzo dell'intervallo Unicode

Infine, utilizzeremo nuovamente Unicode ma questa volta utilizzando l' espressione \ u .

Il problema è che alcuni punti Unicode non si adattano a un carattere Java a 16 bit, quindi alcuni di essi richiedono due caratteri.

Ecco l'espressione corrispondente usando \ u :

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

7. Conclusione

In questo rapido articolo, abbiamo imparato diversi modi per rimuovere gli emoji da una stringa Java. Abbiamo utilizzato la libreria di emoji, le espressioni regolari e gli intervalli Unicode.

Il codice sorgente completo per gli esempi può essere trovato su GitHub.