有没有一种方法可以在Java中识别字符串是否包含HTML标记

14

是否有预定义的方法可以判断字符串中是否包含HTML标签或字符?


1
不,你实际的问题是什么?可能有更好的解决方案。 - Kayaman
你可以尝试在字符串上使用类似 JSoup 的工具,看看长度是否会改变。如果长度没有改变,则说明该字符串不包含 HTML。 - Tim Biegeleisen
JSoup是一个相当不错的HTML解析器,但它取决于您在字符串中查找HTML代码的目的是什么... - Kibadachi
在我的场景中,我会在运行时获取各种字符串对象。这些字符串可能包含 HTML 标记,也可能不包含。HTML 标记并不一定指字符串以 <html> 开头且以 </html> 结束,而是可以是类似于此的内容:<br/>Test Plan: YTL Test Plan for Release 1<br/><br/>Test Case: Clarity TC - Provisioning 1<br/> 我需要将包含 HTML 的字符串解析为普通字符串。 - Neha S
4个回答

15

你可以尝试使用正则表达式,例如这样

private static final String HTML_PATTERN = "<(\"[^\"]*\"|'[^']*'|[^'\">])*>";
private Pattern pattern = Pattern.compile(HTML_PATTERN);

public boolean hasHTMLTags(String text){
    Matcher matcher = pattern.matcher(text);
    return matcher.find();
}

4
我认为你的方法需要使用 pattern.matcher(text).find()。 - Somaiah Kumbera
1
请注意,包含重复的备选路径(即(A|B) *)的正则表达式可能会遇到StackOverflowErrors。有关更多信息,请参见此问题/答案:https://dev59.com/8Ws05IYBdhLWcg3wANPj - GlennV

7

可以使用正则表达式来搜索或识别字符串中的HTML标签。

boolean containsHTMLTag = stringHtml.matches(".*\\<[^>]+>.*");

或者像Tim建议的那样使用Jsoup,如下所示:
String textOfHtmlString = Jsoup.parse(htmlString).text();
boolean containedHTMLTag = !textOfHtmlString.equals(htmlString);

关于正则表达式,我有两个问题:首先,你不应该转义关闭的">"吗?像这样 ".*\\<[^>]+\\>.*";其次,似乎一个XML文档也适用于这个正则表达式。 - Sharon Ben Asher
我会尝试使用Jsoup并确认。 - Neha S
Jsoup方法非常好用,但请注意它会标记任何带有额外空格的字符串。 - takendarkk
1
jsoup无法工作。解析器也会删除换行符。因此,您可能会得到错误的结果。 - Somaiah Kumbera
JSOUP不起作用 - 当我传递“aaaa”时,它会给出一个HTML输出 - 因此长度检查将始终通过。 - user1428716

1
你应该使用find()。
private static final String HTML_TAG_PATTERN = "<(\"[^\"]*\"|'[^']*'|[^'\">])*>";

static Pattern htmlValidator = TextUtils.isEmpty(HTML_TAG_PATTERN) ? null:Pattern.compile(HTML_TAG_PATTERN);

public static boolean validateHtml(final String text){
    if(htmlValidator !=null)
      return htmlValidator.matcher(text).find();
    return false;
  }

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接