Пытаясь заставить 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-файл или тело ответа. Если бы вы получили только тело, я бы использовал решение Шона Педерсена

Другие вопросы по тегам