我正在尝试阅读包含此类内容的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元素之外的任何内容。有什么想法吗?
答案 0 :(得分:0)
我如何将这一行分成多行,应该如此 所以我可以阅读每个?
我可能完全错了,但似乎你的数据似乎有换行符,它们实际上可能是回车。
另请查看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的解决方案