2016-01-24 25 views
0

如果你有一个存储在字符串ArrayList中的HTML页面,并且你想要读取某个类别类型的整个<div>标签,那么你如何阅读下一行,以便它能够到达div标签的末尾?读取n次行的ArrayList的一部分?

for (String l : line) { 
    if (l.contains("<div class=\"somne_class\">"){ 

     //read the next n strings in ArrayList until </div> tag is reached 
} 

回答

1

通常,将HTML文件存储为原始字符串列表是一个坏主意。你为什么以这种方式存储它?

想象一下你有像<div id="outer_div"><div id=""inner_div>Hei!</div></div>这样的字符串。这里你在一行中有多个嵌套的HTML标签,所以你不会轻易得到结束标签。

考虑使用HTML解析器,然后您可以按类型或属性获取所需的标签。 Java中有很多HTML解析器。最流行的是jsoup。

+0

我做了它,它会一次下载整个html页面并将其存储在ArrayList中,并使用函数来提取不同的标签,段落等,我不希望它每次都连接到互联网 – rimwydas44

+0

@ rimwydas44什么是阻止您将整个页面存储在一个字符串中,并在稍后解析/重新使用它? – Pshemo

+0

@Pshemo我认为把大字符串作为一个字符存储是愚蠢的吗?我总是被证明将它们存储在数组中 – rimwydas44

1

我同意弗拉基米尔,你可能正在寻找一个HTML解析器

要回答在后的确切问题:简单地寻找下一个</div>标签,你可以使用一个for循环代替foreach循环的。

for (int i = 0; i < line.size(); ++i) { 
    String l = line.get(i); 
    if (l.contains("<div class=\"somne_class\">") { 
     for (int j = i; j < line.size(); ++j) { 
      String l2 = line.get(j); 
      if (l2.contains("</div>")) { 
       // l2 is the next line that contains a </div> tag 
      } 
     } 
    } 
} 

注意,这可能不是匹配的结束标记的开始标记,即使你认为每一个标签是在不同的线路。

0

我建议你使用jsoup

这是解析编写HTML file.Althought我有很好的不 尚未挖得多就在这里是把所有的元素 与标签的例子DIV

Document htmlFile = null; 
    // Read the html file 
    try { 
     htmlFile = Jsoup.parse(new File("path"),"UTF-8");//path,encoding 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    Elements images = htmlFile.getElementsByTag("div"); 

你可以做更多的阅读here