【发布时间】:2015-02-07 14:12:30
【问题描述】:
我正在尝试阅读包含类似内容的 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。现在我只对每个 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();
}
}
}
编辑1: 问题似乎是整个输入是一行而不是多行,因为它应该是。我如何将一行分成多行以便我可以读取每一行?
编辑2:
感谢大家。我已经想通了。我仍然使用 String 的单个 long 输入,但我只是使用 .split() 将它划分为一个 String 数组并读取其中的每个元素。然而,现在又出现了一个新问题。对于我的 String[] url,我只阅读第一个元素。当我实际上想读取 url 中的所有 String 元素时,我无法读取第一个 String urls 元素之外的任何内容。有什么想法吗?
【问题讨论】:
-
看起来应该可以,但我强烈建议您在 while 循环的主体周围添加大括号以清楚起见。
-
整个数据可能排成一行...我遇到过这个问题..打印数据/字符串并检查。
-
str 在哪里以及如何显示或返回?
-
调试该程序并检查第一行中
s包含的内容。如果从该文件中删除换行符,则它可能包含整个 HTML 文件。 -
您的
str是在循环内定义的,并且从未实际使用过。你怎么知道它包含的数据是错误的?
标签: java bufferedreader bufferedinputstream