1. Обзор
В наши дни эмодзи становятся все более популярными в текстовых сообщениях — иногда нам нужно очистить наш текст от них и других символов.
В этом уроке мы обсудим различные способы удаления смайликов из строки
в Java.
2. Использование библиотеки эмодзи
Во-первых, мы будем использовать библиотеку эмодзи, чтобы удалить эмодзи из нашей строки
.
Мы будем использовать emoji-java
в следующем примере, поэтому нам нужна эта зависимость от нашего pom.xml
:
<dependency>
<groupId>com.vdurmont</groupId>
<artifactId>emoji-java</artifactId>
<version>4.0.0</version>
</dependency>
Последнюю версию можно найти здесь .
Теперь давайте посмотрим, как использовать 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
для замены emoji его псевдонимами, используя метод 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]|[\ud83d\ude80-\ud83d\udeff]", "");
assertEquals(result, "la conférence, commencera à 10 heures ");
}
7. Заключение
В этой быстрой статье мы узнали о различных способах удаления смайликов из строки Java. Мы использовали библиотеку эмодзи, регулярные выражения и диапазоны Unicode.
Полный исходный код примеров можно найти на GitHub .