2013-02-21 1 views
11

В настоящее время я работаю над преобразованием кодов 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) 
+2

Он уже ответил :). [Рекомендуемый метод экранирования HTML в Java] (http://stackoverflow.com/questions/1265282/recommended-method-for-escaping-html-in-java) –

ответ

25

Кроме того, есть ли способ, чтобы оптимизировать это регулярное выражение?

Да, не использовать регулярное выражение для выполнения этой задачи, использовать Apache StringEscapeUtils из Apache commons lang:

import org.apache.commons.lang.StringEscapeUtils; 
... 
String withCharacters = StringEscapeUtils.unescapeHtml(yourString); 

JavaDoc говорит:

декодирует строку, содержащую объект ускользает в строку содержащие фактические символы Юникода, соответствующие экранам. Поддерживает объекты HTML 4.0.

Например, строка "&lt;Fran&ccedil;ais&gt;" станет "<Français>"

Если предприятие не распознан, то оставили в покое, и вставляется дословно в результирующую строку. например "&gt;&zzzz;x" будет ">&zzzz;x".

+0

Внутренне он перебирает переданную строку и использует двойной размер stringBuffer для сохраните результат. Возможно, предварительно скомпилированное оптимизированное регулярное выражение даст вам желаемый результат с лучшей производительностью. Как вы думаете? :) –

+1

@Quoi: Я всегда буду использовать решение, которое я разместил, если профилирование не покажет, что это узкое место в памяти или времени выполнения, но этого никогда не было до сих пор, и я уверен, что никогда не будет. – jlordo

+0

Я получаю NumberFormatException для строки 'A & B' –

1

Один из всех других возможностей или существующих UTIL методов может быть пружинным веб org.springframework.web.util.HtmlUtils.htmlUnescape.

Пример использования в самодостаточный Groovy скрипт:

@Grapes(
    @Grab(group='org.springframework', module='spring-web', version='4.3.0.RELEASE') 
) 
import org.springframework.web.util.HtmlUtils 

println HtmlUtils.htmlUnescape("La &#xE9;lite del tenis no teme al zika y jugar&#xE1; en R&#xED;o") 

 Смежные вопросы

  • Нет связанных вопросов^_^