Java的。如何从BufferedReader值中删除所有行以避免解析它们?

时间:2013-12-23 14:38:23

标签: java bufferedreader

目前我已经得到了以下从网站上抓取数据的内容。

        try {
        in = ServiceUtils.connect(url);
    } catch (Exception e1) {

        e1.printStackTrace();
    }

这很棒,然后我可以遍历每一行来找到我想要的东西。

while ((inputLine = in.readLine()) != null){
    //Do a whole bunch of stuff
}

然而,while循环意味着我将循环遍历页面的整个内容,当我已经知道我只想在达到如下所示的唯一文本字符串之后查看内容:

<caption>Latest Entries</caption>

如何跳过解析每行代码?在解析之前是否可以删除该字符串上的所有内容?

2 个答案:

答案 0 :(得分:6)

除非你知道它在页面上的位置(前面有多少个字符),否则没有真正的方法可以做到这一点。在不知道要跳转到的位置的情况下,您无法跳转到某个位置,找到该位置的唯一方法是扫描文件以查找您的字符串。

您可以做的是确保一次扫描一行文件,并在找到与搜索字符串匹配的行后才开始任何其他处理。

任何库方法(即indexOf,match等)都必须通过扫描你在方法之外进行的方法来进行相同的循环。

我只做两个while循环,第一个消耗字符串直到找到匹配,第二个然后处理。

while ((inputLine = in.readLine()) != null &&
        inputLine.indexOf("<caption>Latest Entries</caption>")!=-1){
    // Do nothing
} 
while ((inputLine = in.readLine()) != null) {
    // Now do stuff
}

答案 1 :(得分:2)

你不能真正使用BufferedReader跳过本机,你必须使用这样的基于状态机的结构:

boolean alreadyEncounteredCaption = false;
while ((inputLine = in.readLine()) != null){
    if(inputLine.equals("<caption>Latest Entries</caption>")) {
         alreadyEncounteredCaption = true;
    }
    if(alreadyEncounteredCaption) {
        //Do a whole bunch of stuff
    }
}

您甚至可以扩展BufferedReader以获得自定义Reader类,该类会自动跳过指定行之前的所有内容。