Замените HTML-коды эквивалентными символами в Java
В настоящее время я работаю над преобразованием кодов HTML с эквивалентными символами в java.
Мне нужно преобразовать приведенный ниже код в символы.
è - è
® - ®
& - &
ñ - ñ
& - &
Я попытался использовать шаблон регулярного выражения
(&#x)([\\d|\\w]*)([\\d|\\w]*)([\\d|\\w]*)([\\d|\\w]*)(;)
Когда я отлаживаю, matcher.find()
дает мне true
, но элемент управления пропускает цикл, где я написал код для преобразования. Не знаю, что там происходит.
Кроме того, есть ли способ оптимизировать это регулярное выражение?
Любая помощь приветствуется.
Исключение
java.lang.NumberFormatException: For input string: "x26"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at org.apache.commons.lang.Entities.unescape(Entities.java:683)
at org.apache.commons.lang.StringEscapeUtils.unescapeHtml(StringEscapeUtils.java:483)
Ответы
Ответ 1
Кроме того, есть ли способ оптимизировать это регулярное выражение?
Да, не использовать regex для этой задачи, используйте Apache StringEscapeUtils из Apache commons lang:
import org.apache.commons.lang.StringEscapeUtils;
...
String withCharacters = StringEscapeUtils.unescapeHtml(yourString);
JavaDoc говорит:
Unescapes строка, содержащая escape-последовательности объекта, в строку, содержащую фактические символы Юникода, соответствующие экранам. опоры Объекты HTML 4.0.
Например, строка "<Français>"
станет "<Français>"
Если объект непризнан, он остается один и вставляется в строку результата в стенограмме. например ">&zzzz;x"
станет ">&zzzz;x"
.
Ответ 2
Одной из других возможностей или существующих методов использования может быть spring -web org.springframework.web.util.HtmlUtils.htmlUnescape
.
Пример использования в автономном Groovy script:
@Grapes(
@Grab(group='org.springframework', module='spring-web', version='4.3.0.RELEASE')
)
import org.springframework.web.util.HtmlUtils
println HtmlUtils.htmlUnescape("La élite del tenis no teme al zika y jugará en Río")