Как удалить блок разных символов из строки Unicode

Я бы хотел remove miscellaneous symbols block from Unicode string Использование регулярного выражения также может попробовать, но ни одно из них не является регулярным выражением. Думаю, текущее может кто-нибудь помочь мне в этом вопросе, как я могу удалить блок разных символов из строки.

Unicode String

\u263A\uD83D\uDE0A\uD83D\uDE22)\uD83C\uDF82

Код:

String input = "\u263A\uD83D\uDE0A\uD83D\uDE22)\uD83C\uDF82";
input.replaceAll("[\u2600-\u26FF]|[\u2700-\u27BF]", "");

Ожидаемое:

\uD83D\uDE0A\uD83D\uDE22)\uD83C\uDF82

но это не будет работать, как я могу решить эту проблему.

2 ответа

Решение

Если во входном тексте содержатся символы, экранированные от u, в виде текста, состоящего из обратной косой черты, 'u' и четырех шестнадцатеричных цифр, сначала преобразуйте их в вещественные chars.

input = StringEscapeUtils.unescapeJava(Input); // From Apache commons
input = input.replaceAll("[\u2600-\u26FF]|[\u2700-\u27BF]", "");

Это не работает, потому что String является неизменяемым в Java, вы должны использовать назначение результата для ввода следующим образом:

String result = input.replaceAll("[\u2600-\u26FF]|[\u2700-\u27BF]", "");

Или просто:

input = input.replaceAll("[\u2600-\u26FF]|[\u2700-\u27BF]", "");

Так что если вы сделаете печать, как это:

System.out.println(input);
System.out.println("\uD83D\uDE0A\uD83D\uDE22)\uD83C\uDF82");

Оба дает:

)
)
Другие вопросы по тегам