Рубрики
Без рубрики

Удалите Emojis из Java-строки

Посмотрите, как удалить смайлики из текста на Java

Автор оригинала: baeldung.

Удалите Emojis из Java-строки

1. Обзор

Emojis становятся все более популярными в текстовых сообщений в эти дни – иногда мы должны очистить наш текст от них и других символов.

В этом учебнике мы обсудим различные способы удаления смайликов из Струнные на Яве.

2. Использование библиотеки эмодзи

Во-первых, мы будем использовать библиотеку смайликов для удаления смайликов из нашей Струнные .

Мы будем использовать emoji-java в следующем примере, поэтому мы должны эту зависимость от нашей пом.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 ");
}

Вот, мы вызов удалитьAllEmojis () метод 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) – для чисел
  • (пЗП) – для пунктуации
  • (п. п.) – для белопространственных сепараторов
  • ^ для отрицания, так что все эти выражения будут в белом списке

Это выражение будет хранить только буквы, цифры, знаки препинания и белое пространство. Мы можем настроить выражение, как мы хотим, чтобы или удалить больше типов символов

Мы также можем использовать String.replaceAll () с тем же 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. Использование код-пойнтов

Теперь мы также обнаружим смайлики, используя их кодовые точки. Мы можем использовать «хексидецимальное значение» выражение, чтобы соответствовать определенной точке 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 снова, но с помощью Зу выражение на этот раз.

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

Вот соответствующее выражение с помощью Зу :

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

    assertEquals(result, "la conférence, commencera à 10 heures ");
}

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

В этой быстрой статье мы изучили различные способы удаления смайликов из Java String. Мы использовали библиотеку смайликов, регулярные выражения и диапазоны Unicode.

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