试图让BufferedReader读取过去的第一行

时间:2014-12-09 15:49:53

标签: java bufferedreader bufferedinputstream

我正在尝试阅读包含此类内容的HTML链接

<html>
<head>
<title>
Title
</title>
</head>
<body>
Name1 Age1 Hometown1<br>
Name2 Age2 Hometown2<br>
Name3 Age3 Hometown3<br>
</body>
</html>

方法readData(String [] urls)其中String [] urls是一个字符串数组,字符串是一个或多个url。现在我只对每个网址的html主体中的内容感兴趣,因此我在.readLine!=null.contains("<br>")时使用了。但是,似乎我的代码只能读取正文块的第一行(从<body>之后的行开始,如我所愿)并且直到</body>之后才会继续读取。如何让我的代码读到第一行?

public void readData(String[] urls) {
        for (int i=0; i<urls.length; i++) {
            String str="";
            try { 
                URL url=new URL(urls[i]);
                URLConnection conn=url.openConnection();
                BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String s;
                while (( s = in.readLine())!=null)
                    if (s.contains("<br>")) {
                        str += s;
                    }
            } catch(Exception e) {
                e.printStackTrace();
            }
        }

    }

EDIT1: 问题似乎是整个输入都是一行而不是多行,应该是这样。我如何将这一行分成多行,以便我可以读取每一行?

EDIT2: 感谢大家。我已经明白了。我仍然使用String的单个长输入,但我只是使用.split()将其分区为String数组并读取其中的每个元素。但是,现在出现了一个新问题。对于我的String []网址,我只是阅读第一个元素。当我想要读取url中的所有String元素时,我无法读取第一个String urls元素之外的任何内容。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

  

我如何将这一行分成多行,应该如此   所以我可以阅读每个?

我可能完全错了,但似乎你的数据似乎有换行符,它们实际上可能是回车。

查看String.split()

另请查看the difference between \n and \r

您可以尝试String textStr[] = yourString.split("\\r?\\n");

之类的内容

正如旁注,StringBuilder就是为此而构建的。

答案 1 :(得分:0)

我认为这个问题的目标是获取正文中的信息并分离BR标签。

readLine()方法将负责读取各行。除非您也参与编写页面的代码,否则我认为您无法做任何事情。我认为需要更多关于数据来源的定义。

为了划分单行,您可以从String类中的方法开始。

使用String.indexOf(“&lt; body&gt;”)来获取正文的位置。 然后使用String.substring(int,int)和indexOf(String,int)的组合来计算其余的细节。

答案 2 :(得分:0)

我尝试用字符串的.split(&#34;&lt; body&gt;&#34;)方法分割输入字符串。然后拆分结果数组的第二个元素,这将是您的body标签的内容。如果你要分割身体,你可以在你的例子中获得一个包含3个元素的数组,只要最后一个&lt; br&gt;标签是你身体的最后一个内容。 (抱歉我的英语很差)

编辑: 无论您是收到html文件还是响应正文,这一点也很重要。如果您只收到身体,我会使用Sean Pedersen的解决方案