单独的html编码字符串和普通字符串

时间:2014-01-17 09:38:12

标签: java html string

我想将包含普通文本和html代码的单个字符串拆分为字符串数组。我试图在谷歌上搜索但没有找到任何合适的建议。

考虑以下字符串:

  blahblahblahblahblahblahblahblahblahblah
  blahblah第一段blahblahblahblah
  blahblahblahblahblahblahblahblahblahblah

<html>
  <body>
    <p>hello</p>
  </body>
</html>
     blahblahblahblahblahblahblahblahblahblah
  blahblah Second Para lahblahblahblahblah
  blahblahblahblahblahblahblahblahblahblah

这变为:

s[0]=whole first para
s[1]=html code
s[2]=whole second para

是否可以通过jsoup?或者我需要任何其他api?

2 个答案:

答案 0 :(得分:0)

使用jQuery是可能的。以下是代码段。

var str = "blablabla <html><body><p>hello</p></body></html> blabla";

var parsedHTML = $.parseHTML(str);
myList = [];

// loop through parsed text and put it into text based on its type
$.each(parsedHTML, function( i, el ) {
    if (el.nodeType < 3) myList[i] = el.nodeName;
    else myList[i] = el.data;
});
// use myList ...

这是一个小提琴,向您展示它的工作原理。唯一的缺点是解析了<html><body>标记,而不是在解析的HTML中获取。

jsfiddle example

答案 1 :(得分:0)

可以使用JSoup

完成此操作

简单使用示例:

String html = "<html><head><title>First parse</title></head>"
 + "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);

然后,您可以导航DOM结构以提取信息。

<强>更新

要获取包含所有标记的文本,您可以将整个字符串包装在<meta> ... </meta>标记中;然后解析它,访问各个组件,最后将组件序列化为字符串。

或者,如果您认为代码格式正确(使用匹配的开头和结尾标记),您可以搜索正则表达式的第一个匹配

/<(html|body)\s*>/

根据第一个标记(匹配)的内容,您可以查找匹配关闭标记的最后一个匹配项。

更多手动,更容易出错,不推荐。但是,由于您有非标准问题,您似乎可能需要非标准解决方案。