Verwijder Emoji's uit een Java-string

1. Overzicht

Emoji's worden tegenwoordig steeds populairder in sms-berichten - soms moeten we onze tekst van hen en andere symbolen verwijderen.

In deze tutorial bespreken we verschillende manieren om emoji's te verwijderen uit een Draad in Java.

2. Emoji-bibliotheek gebruiken

Eerst gebruiken we een emoji-bibliotheek om de emoji's uit onze Draad.

We zullen gebruiken emoji-java in het volgende voorbeeld, dus we moeten deze afhankelijkheid van onze pom.xml:

 com.vdurmont emoji-java 4.0.0 

De laatste versie vind je hier.

Laten we nu eens kijken hoe we het kunnen gebruiken emoji-java om emoji's te verwijderen uit onze Draad:

@Test openbare leegte whenRemoveEmojiUsingLibrary_thenSuccess () {String text = "la conférence, commencera à 10 heures?"; String resultaat = EmojiParser.removeAllEmojis (tekst); assertEquals (resultaat, "la conférence, commencera à 10 heures"); }

Hier waren bellen met de removeAllEmojis () methode van EmojiParser.

We kunnen ook gebruik maken van EmojiParser om emoji te vervangen door zijn aliassen met de parseToAliases () methode:

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

Merk op dat het gebruik van deze bibliotheek erg handig is als we emoji moeten vervangen door hun aliassen.

De emoji-java-bibliotheek detecteert echter alleen emoji's, maar kan geen symbolen of andere speciale tekens detecteren.

3. Met behulp van een reguliere expressie

Vervolgens kunnen we een reguliere expressie gebruiken om emoji's en andere symbolen te verwijderen.

We staan ​​alleen specifieke soorten tekens toe:

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

Laten we onze reguliere expressie afbreken:

  • \ p {L} - om alle letters uit elke taal toe te staan
  • \ p {N} - voor cijfers
  • \ p {P} - voor interpunctie
  • \ p {Z} - voor witruimtescheidingstekens
  • ^ is voor ontkenning, dus al deze uitdrukkingen komen op de witte lijst

Deze uitdrukking houdt alleen letters, cijfers, interpunctie en spaties bij. We kunnen de uitdrukking aanpassen omdat we meer tekensoorten willen toestaan ​​of verwijderen

We kunnen ook gebruik maken van String.replaceAll () met dezelfde regex:

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

5. Codepunten gebruiken

Nu zullen we ook emoji's detecteren met behulp van hun codepunten. We kunnen gebruiken \ x {hexidecimale waarde} expressie die overeenkomt met een specifiek Unicode-punt.

In het volgende voorbeeld verwijderen we twee Unicode-reeksen emoji's met hun Unicode-punten:

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

De volledige lijst met momenteel beschikbare emoji's en hun codepunten is hier te vinden.

6. Unicode-bereik gebruiken

Ten slotte gebruiken we Unicode opnieuw, maar met de extensie \ u uitdrukking deze keer.

Het probleem is dat sommige Unicode-punten niet in één 16-bits Java-teken passen, dus sommige hebben twee tekens nodig.

Hier is de overeenkomstige uitdrukking met \ u:

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

7. Conclusie

In dit korte artikel hebben we verschillende manieren geleerd om emoji's uit een Java-string te verwijderen. We gebruikten een emoji-bibliotheek, reguliere expressies en Unicode-reeksen.

De volledige broncode voor de voorbeelden is te vinden op GitHub.