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.