如何解析java中的字符串以仅获取其中的某些部分

时间:2016-10-24 09:26:08

标签: java string parsing

我需要像这样解析一个字符串:

"<img src=\"some_link\" height=\"200\" width=\"auto\" /><br><br\>"Lorem ipsum dolor si amet...\" Name<br>address<br>www.google.com<br>01 42 42 42 42"

我需要img标签之后的所有内容,但我希望每个标签分开:lorem ipsum部分/名称部分/网络链接部分/电话号码

我不是真的在这里代码示例,而是一些方法和技术来做到这一点。起初我想删除img部分并用 \ n 替换 br 标记,但将每个信息分开以便我可以处理它们会很棒。

编辑: 我在下面使用了Jsoup,它运行正常!感谢

3 个答案:

答案 0 :(得分:0)

我同意Rishabh Gupta的观点,即regexp是最简单的方法。在详细说明之前,我想指出用regexp解析HTML是容易出错的,但是对于简单的任务(可以有少量缺陷),它需要的工作量更少。 一个例子:

String s =  "<img src=\"some_link\" height=\"200\" width=\"auto\";
Pattern p = Pattern.compile("<img src=\"([^\"]+)\" height=\"([^\"]+)\";
Matcher m = p.matcher(s);
if (m.find()) {
    String link = m.group(1);
    String height = m.group(2);
}

在上面的模式中,我使用捕获组&#34;()&#34;和字符集&#34; []&#34;。 E. g。 &#39;([^ \&#34;] +)&#39;表示&#34;一个或多个不是引用的连续字符&#34;这将是第一个捕获组 - 由m.group(1)使用。

如果属性的顺序是固定的,即事先知道图像标记总是具有&#34; src =&#34;然后是&#34; height =&#34;等。对于随机顺序,您可以先找到图像标记内的所有内容(正则表达式:&#34;] +&gt;&#34;)然后使用另一个正则表达式提取属性对。

答案 1 :(得分:0)

您可以在<br>标记上拆分给定的字符串,并将其存储在字符串数组中。

String[] strArr=givenString.split("\\<br>");

在分割功能中使用br标签

根据需要使用字符串数组中的值

答案 2 :(得分:0)

因为这不仅仅是任何字符串,而是HTML,您应该使用HTML解析器(never ever attempt parsing HTML with regex)。

jsoup是Java中的最佳选择:

    String html = "<img src=\"some_link\" height=\"200\" width=\"auto\" /><br><br\\>\"Lorem ipsum dolor si amet...\" Name<br>address<br>www.google.com<br>01 42 42 42 42";
    Document doc = Jsoup.parse(html);

    for (Element e : doc.select("*")) {
        for (TextNode tn : e.textNodes()) {
            System.out.println(tn.text());
        }
    }