Пытаясь заставить BufferedReader прочитать последнюю первую строку
Я пытаюсь прочитать 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 каждого URL, поэтому я использовал .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: Кажется, проблема заключается в том, что весь ввод поступает как одна строка, а не несколько строк, как это и должно быть. Как бы я разделил эту одну строку на несколько строк, чтобы я мог прочитать каждую?
EDIT2: Спасибо всем. Я понял это. Я все еще использую один длинный ввод String, но я просто делю его на массив String, используя .split()
и прочитать каждый элемент этого. Однако сейчас появилась новая проблема. для моих строковых [] URL я читаю только первый элемент. Я не могу прочитать ничего, кроме первого элемента String urls, когда на самом деле я хочу прочитать все элементы String в URL. Есть идеи?
3 ответа
Я думаю, что цель этого вопроса - получить информацию в теле и отделить теги BR.
Метод readLine() позаботится о чтении отдельных строк. Я не думаю, что вы можете что-то сделать, если только вы не связаны с кодом, который пишет страницу. Я думаю, что нужно больше определений относительно источника ваших данных.
Чтобы разделить одну строку, вы можете начать с методов из класса String.
Используйте String.indexOf ("
"), чтобы получить положение тела. Затем используйте комбинацию String.substring (int, int) и indexOf(String,int), чтобы проработать остальные детали.Как бы я разделил эту одну строку на несколько строк, как это должно быть, чтобы я мог прочитать каждую?
Я могу быть совершенно не прав по этому поводу, но, похоже, если в ваших данных появляются новые строки, они могут фактически быть возвратом каретки.
Проверьте String.split()
Также проверьте разницу между \n
а также \r
Вы можете попробовать что-то вроде String textStr[] = yourString.split("\\r?\\n");
Как примечание, StringBuilder
был построен для этого.
Я бы попытался разделить входную строку с помощью метода.split ("
") вашей строки. Затем разделите второй элемент полученного массива, который будет содержимым вашего тега body. Если вы разделите тело, как в вашем примере, вы получите массив из 3 элементов, если последний тегявляется самым последним содержимым вашего тела. (извините за мой довольно плохой английский)
РЕДАКТИРОВАТЬ: Это также важно, если вы получаете HTML-файл или тело ответа. Если бы вы получили только тело, я бы использовал решение Шона Педерсена