Премахнете Emojis от Java String

1. Общ преглед

В наши дни емоджитата стават все по-популярни в текстовите съобщения - понякога трябва да почистим текста си от тях и други символи.

В този урок ще обсъдим различни начини за премахване на емотикони от низ в Java.

2. Използване на Emoji Library

Първо ще използваме библиотека с емотикони, за да премахнем емотиконите от нашия низ .

Ще използваме emoji-java в следния пример, така че трябва да зависим от нашия pom.xml :

 com.vdurmont emoji-java 4.0.0 

Най-новата версия можете да намерите тук.

Сега нека видим как да използваме emoji-java за премахване на емотикони от нашия низ :

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

Ето, ние се обадите на removeAllEmojis () метода на EmojiParser .

Също така можем да използваме EmojiParser, за да заменим емотиконите с техните псевдоними, използвайки метода 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:"); }

Имайте предвид, че използването на тази библиотека е много полезно, ако трябва да заменим емотиконите с техните псевдоними.

Библиотеката на emoji-java обаче ще открива само емотикони, но няма да може да открива символи или други специални знаци.

3. Използване на регулярен израз

След това можем да използваме регулярен израз, за ​​да премахнем емотикони и други символи.

Ще разрешим само специфични типове знаци:

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

Нека разбием нашия регулярен израз:

  • \ p {L} - за разрешаване на всички букви от всеки език
  • \ p {N} - за числа
  • \ p {P} - за пунктуация
  • \ p {Z} - за разделители на празно пространство
  • ^ е за отрицание, така че всички тези изрази ще бъдат в белия списък

Този израз ще запази само букви, цифри, пунктуация и интервали. Можем да персонализираме израза, тъй като искаме да разрешим или премахнем повече типове символи

Можем да използваме и String.replaceAll () със същия регекс:

@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. Използване на кодови точки

Сега ще открием и емотикони, използвайки техните кодови точки. Можем да използваме израза \ x {шестнадесетична стойност}, за да съответства на конкретна Unicode точка.

В следващия пример премахваме два Unicode диапазона от емотикони, използвайки техните 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 "); }

Пълният списък на наличните в момента емоджи и техните кодови точки можете да намерите тук.

6. Използване на обхват на Unicode

И накрая, ще използваме отново Unicode, но този път използваме израза \ u .

Проблемът е, че някои Unicode точки не се побират в един 16-битов Java символ, така че някои от тях се нуждаят от два знака.

Ето съответния израз, използващ \ u :

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

7. Заключение

В тази бърза статия научихме различни начини за премахване на емотикони от Java String. Използвахме библиотека с емотикони, регулярни изрази и диапазони на Unicode.

Пълният изходен код за примерите може да бъде намерен в GitHub.