【问题标题】:java extracting from stringjava从字符串中提取
【发布时间】:2012-01-23 20:09:10
【问题描述】:

我有一个类似于

的字符串数组
 <div id="option1">hello</div>
 <div style="color: cyan">world</div>

有没有一种方法可以从 div 中提取信息?我已经写了一些东西,但它不是动态的(我必须指定位的长度),这在我的应用程序中是无用的,因为数组 ^ 中的内容并不总是相同的。

希望您能理解我的问题,如果您需要更多信息,我会尽快回复。

我正在使用 java。

【问题讨论】:

  • 你需要一个 HTML 解析器。
  • Chuck Norris 在这里使用正则表达式:)
  • 您是否尝试过 java 中可用的一些 XML 解析器?萨克斯? Xerces?
  • @PetarMinchev,不,Chuck Norris 不使用正则表达式。数据看到他来了并自行解析。
  • 不敢使用正则表达式,尽管它有时可以很好地与 HTML 一起工作。

标签: java regex arrays methods substring


【解决方案1】:

正如@SLaks 所说,使用 HTML 解析器。 Java有很多好的。我最喜欢的是jSoup

【讨论】:

  • 谢谢,除了使用外部库之外还有其他方法吗?
  • 并非如此。 Java 有一个很好的“内置”XML 解析器,但 HTML 是一个非常不同的野兽。
【解决方案2】:

完整的Jsoup 示例:

List<String> res = new ArrayList<String>();
String[] html = new String[] { 
    "<div id=\"option1\">hello</div>",
    "<div style=\"color: cyan\">world</div>" };
for (String el : html) {
    String text = Jsoup.parse(el).text();
    res.add(text);
    System.out.println(text);
}

输出:

hello
world

请注意,您示例中的 HTML 是格式良好的 XML,也可以使用任何 XML 解析器进行解析。在处理格式不正确的输入时,您需要一个特定于 HTML 的解析器。

【讨论】:

    【解决方案3】:

    如果你知道只有一组 HTML 标签,如果你知道它是什么标签就更好了,你也许可以做这样的事情:

    String[] html = new String[] { 
        "<div id=\"option1\">hello</div>",
        "<div style=\"color: cyan\">world</div>" };
    
    for(String index : html){
        int firstEnd = index.firstIndexOf("/>");
        int lastBeginning = index.indexOf("<", 2); // Could become "</div>
    
        String contents = index.substring(firstEnd + 1, lastBeginning - 1);
        System.out.println(contents);
    }
    

    请注意,我没有测试过这段代码,也没有在 IDE 中编写过,所以它可能并不完全正确,但我想你可以看到我的出发点。只需获取信息前最后一个标签的结束“>”和前一个标签的结束部分的开始“

    我还可以看到像这样的代码被修改为处理字符串将多个HTML标签有点想象力......

    或者,我不敢相信我一开始就没有想到这一点,您可以使用类似以下的内容。不过,同样,它仅限于一个 HTML 标记,不过我相信您可以根据需要提出一种 tag-counting 方法。

    String[] html = new String[] { 
                    "<div id=\"option1\">hello</div>",
                    "<div style=\"color: cyan\">world</div>" };
    
            String tag = "div";
            Pattern p = Pattern.compile("<" + tag + ".*?>(.*?)</" + tag + ">");
            Matcher m;
    
            for(String index : html){
                m = p.matcher(index);
                while(m.find()) System.out.println(m.group(1));
            }
    

    HTH

    【讨论】:

      猜你喜欢
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 2018-11-28
      • 2013-08-28
      • 1970-01-01
      相关资源
      最近更新 更多