У меня есть строки как:
Avery® Laser & Inkjet Self-Adhesive
Я должен преобразовать их в
Avery Laser & Inkjet Self-Adhesive.
Т.е. удалите специальные символы и преобразуйте HTML специальные символы в регулярные.
Avery® Laser & Inkjet Self-Adhesive
Первое использование StringEscapeUtils # unescapeHtml4 ()
(или #unescapeXml ()
, в зависимости от исходного формата) для отмены экранирования и
в и
. Затем используйте String # replaceAll ()
на [^ \ x20- \ x7e]
, чтобы избавиться от символов, которые не входят в печатаемый диапазон ASCII .
Резюме:
String clean = StringEscapeUtils.unescapeHtml4(dirty).replaceAll("[^\\x20-\\x7e]", "");
.. который производит
Avery Laser & Inkjet Self-Adhesive
(без конечной точки, как в вашем примере, но ее не было в оригинале;))
Тем не менее, это, однако, больше похоже на запрос на обходной путь , чем на запрос к решению . Если вы подробнее расскажете о функциональных требованиях и / или о происхождении этой строки, мы сможем предоставить правильное решение. ®
, похоже, вызвано использованием неправильной кодировки для чтения строки, а и
выглядят как вызванные использованием текстового синтаксического анализатора для чтения строки вместо полноценного HTML-парсера.
Может быть, вы могли бы использовать что-то вроде:
yourTxt = yourTxt.replaceAll("&", "&");
в каком-то проекте я сделал что-то вроде:
public String replaceAcutesHTML(String str) {
str = str.replaceAll("á","á");
str = str.replaceAll("é","é");
str = str.replaceAll("í","í");
str = str.replaceAll("ó","ó");
str = str.replaceAll("ú","ú");
str = str.replaceAll("Á","Á");
str = str.replaceAll("É","É");
str = str.replaceAll("Í","Í");
str = str.replaceAll("Ó","Ó");
str = str.replaceAll("Ú","Ú");
str = str.replaceAll("ñ","ñ");
str = str.replaceAll("Ñ","Ñ");
return str;
}
Вы можете использовать класс StringEscapeUtils
из проекта Apache Commons Text .