Odstráňte emodži z reťazca Java

1. Prehľad

Emodži sú v dnešnej dobe čoraz populárnejšie v textových správach - niekedy musíme vyčistiť náš text od nich a ďalších symbolov.

V tomto výučbe si ukážeme rôzne spôsoby odstránenia emodži z a String v Jave.

2. Používanie knižnice emodži

Najskôr použijeme knižnicu emodži na odstránenie emodži z nášho String.

Použijeme emoji-java v nasledujúcom príklade, takže potrebujeme túto závislosť od našej pom.xml:

 com.vdurmont emoji-java 4.0.0 

Najnovšiu verziu nájdete tu.

Teraz sa pozrime, ako sa používa emoji-java odstrániť emodži z nášho String:

@Test public void whenRemoveEmojiUsingLibrary_thenSuccess () {String text = "la conférence, commencera à 10 heures?"; Výsledok reťazca = EmojiParser.removeAllEmojis (text); assertEquals (výsledok, „la conférence, commencera à 10 heures“); }

Tu sme volá removeAllEmojis () metóda EmojiParser.

Môžeme tiež použiť EmojiParser nahradiť emoji svojimi aliasmi pomocou parseToAliases () metóda:

@Test public void whenReplaceEmojiUsingLibrary_thenSuccess () {String text = "la conférence, commencera à 10 heures?"; Výsledok reťazca = EmojiParser.parseToAliases (text); assertEquals (výsledok, "la conférence, commencera à 10 heures: sweat_smile:"); }

Upozorňujeme, že používanie tejto knižnice je veľmi užitočné, ak potrebujeme nahradiť emodži ich aliasmi.

Knižnica emoji-java však zistí iba emodži, nebude však schopná detegovať symboly ani iné špeciálne znaky.

3. Použitie regulárneho výrazu

Ďalej môžeme pomocou regulárneho výrazu odstrániť emodži a ďalšie symboly.

Povolíme iba konkrétne typy znakov:

@Test public void whenRemoveEmojiUsingMatcher_thenSuccess () {String text = "la conférence, commencera à 10 heures?"; Reťazec regex = "[^ \ p {L} \ p {N} \ p {P} \ p {Z}]"; Pattern pattern = Pattern.compile (regex, Pattern.UNICODE_CHARACTER_CLASS); Matcher matcher = pattern.matcher (text); Výsledok reťazca = matcher.replaceAll (""); assertEquals (výsledok, „la conférence, commencera à 10 heures“); }

Rozoberme si náš regulárny výraz:

  • \ p {L} - povoliť všetky písmená z ľubovoľného jazyka
  • \ p {N} - pre čísla
  • \ p {P} - na interpunkciu
  • \ p {Z} - pre oddeľovače medzier
  • ^ je na negáciu, takže všetky tieto výrazy budú na bielom zozname

Tento výraz zachová iba písmená, čísla, interpunkciu a medzery. Výraz môžeme prispôsobiť tak, ako chceme povoliť alebo odstrániť viac typov znakov

Môžeme tiež použiť String.replaceAll () s rovnakým regulárnym výrazom:

@Test public void whenRemoveEmojiUsingRegex_thenSuccess () {String text = "la conférence, commencera à 10 heures?"; Reťazec regex = "[^ \ p {L} \ p {N} \ p {P} \ p {Z}]"; Výsledok reťazca = text.replaceAll (regex, ""); assertEquals (výsledok, „la conférence, commencera à 10 heures“); }

5. Používanie kódových bodov

Teraz tiež odhalíme emodži pomocou ich kódových bodov. Môžeme použiť \ x {hexadecimálna hodnota} výraz zodpovedajúci konkrétnemu bodu Unicode.

V nasledujúcom príklade odstránime dva rozsahy emodži Unicode pomocou ich bodov Unicode:

@Test public void whenRemoveEmojiUsingCodepoints_thenSuccess () {String text = "la conférence, commencera à 10 heures?"; Výsledok reťazca = text.replaceAll ("[\ x {0001f300} - \ x {0001f64f}] | [\ x {0001f680} - \ x {0001f6ff}]", ""); assertEquals (výsledok, „la conférence, commencera à 10 heures“); }

Celý zoznam momentálne dostupných emodži a ich kódových bodov nájdete tu.

6. Používanie rozsahu Unicode

Nakoniec opäť použijeme Unicode, ale použijeme \ u výraz tentokrát.

Problém je v tom, že niektoré body Unicode sa nezmestia do jedného 16bitového znaku Java, takže niektoré z nich potrebujú dva znaky.

Tu je zodpovedajúci výraz pomocou \ u:

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

7. Záver

V tomto rýchlom článku sme sa naučili rôzne spôsoby odstránenia emodži z reťazca Java String. Použili sme knižnicu emoji, regulárne výrazy a rozsahy Unicode.

Celý zdrojový kód príkladov nájdete na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found