【问题标题】:trying to get BufferedReader to read past first line试图让 BufferedReader 读取第一行
【发布时间】: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("&lt;br&gt;")。但是,似乎我的代码只能读取主体块的第一行(如我所愿,从&lt;body&gt; 之后的行开始)并且直到&lt;/body&gt; 之后的行才继续。如何让我的代码读完第一行?

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


【解决方案1】:

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

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

查看String.split()

也可以查看the difference between \n and \r

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

顺便说一句,StringBuilder 就是为此而构建的。

【讨论】:

    【解决方案2】:

    我觉得这道题的目的是获取body里面的信息,把BR标签分开。

    readLine() 方法将负责读取各个行。我认为您无能为力,除非您也参与编写页面的代码。我认为需要对您的数据来源进行更多定义。

    为了分割一行,你可以从 String 类的方法开始。

    使用 String.indexOf("

    ") 获取 body 的位置。 然后使用 String.substring(int,int) 和 indexOf(String,int) 的组合来计算其余的细节。

    【讨论】:

      【解决方案3】:

      我会尝试使用字符串的 .split("

      ") 方法拆分输入字符串。然后拆分结果数组的第二个元素,这将是你的 body 标签的内容。如果您要拆分正文,在您的示例中,只要最后一个
      标记是您正文的最后一个内容,您就会得到一个包含 3 个元素的数组。 (对不起我的英语不好)

      编辑: 您是否收到 html 文件或响应正文也很重要。如果你只收到尸体,我会使用 Sean Pedersen 的解决方案

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        • 2013-10-30
        • 2020-07-01
        • 2018-09-04
        • 2014-06-07
        • 2018-05-01
        相关资源
        最近更新 更多