Другой усекает без округления решения и примера.
Convert 71.950005666 to a single decimal place number (71.9)
1) 71.950005666 * 10.0 = 719.50005666
2) Floor(719.50005666) = 719.0
3) 719.0 / 10.0 = 71.9
select Floor(71.950005666 * 10.0) / 10.0
Вместо этого следует использовать синтаксический анализатор HTML. Мне нравится htmlCleaner , потому что он дает мне довольно печатную версию HTML.
С помощью htmlCleaner вы можете:
TagNode root = htmlCleaner.clean( stream );
Object[] found = root.evaluateXPath( "//div[id='something']" );
if( found.length > 0 && found instanceof TagNode ) {
((TagNode)found[0]).removeFromTree();
}
Если вам просто нужно удалить теги, вы можете использовать это регулярное выражение:
content = content.replaceAll("<[^>]+>", "");
Оно удалит только теги, но не другие элементы HTML. Для более сложных задач вам следует использовать синтаксический анализатор.
EDIT : Чтобы избежать проблем с комментариями HTML, вы можете сделать следующее:
content = content.replaceAll("<!--.*?-->", "").replaceAll("<[^>]+>", "");
Нет. Регулярные выражения по определению не могут анализировать HTML.
Вы можете использовать регулярное выражение для s / <[^>] * \> //
или чего-то подобного, но этого будет недостаточно, особенно если вы заинтересованы в удалении содержимого тегов.
Как сказал другой автор, используйте настоящий анализатор HTML.
В качестве альтернативы, если вы намерены отображать ввод, управляемый пользователем, обратно клиенту, то вы также можете просто заменить все <
на & lt;
и все >
от & gt;
. Таким образом, HTML не будет интерпретироваться как есть клиентским приложением (веб-браузером).
Если вы используете JSP в качестве технологии просмотра, вы можете использовать JSTL c: out
для этого . По умолчанию он экранирует все объекты HTML. Так, например,
<c:out value="<script>alert('XSS');</script>" />
НЕ будет отображать предупреждение, а просто покажет фактическую строку как есть.