【问题标题】:Android http request readlineAndroid http请求readline
【发布时间】:2015-05-19 06:29:46
【问题描述】:

我试图通过 http 请求读取网页源代码。 我的目的是从结果中读取一个整数值(价格)。

我正在使用 bufferedReader 来读取行。我不清楚哪种方法可以存储我想要的数据。

下面是我使用的代码:

BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8") );
String data = null;
String webPage = "";
while ((data = reader.readLine()) != null){
   webPage += data + "\n";
}

更新: 这是http请求的示例结果:

 more...<div class="price-block--grid">
                <div class="old-price-wrap">
                    <!-- begin old price -->
                    <div class="product-card__old-price">RM 1,500.00</div>
                    <!-- end old price -->
                    <!-- begin sale -->
                    <div class="product-card__sale">- 6%</div>
                    <!-- end sale -->
                </div>
                <div class="product-card__price">RM 1,408.00</div>....more

我想知道有什么方法可以让我只检索价格值(例如,例如 1408)并将其存储到我的数据变量中吗?

【问题讨论】:

  • 你的故事不完整。请继续。以一个问题结束。
  • 数据将存储在 webPage 变量中。

标签: java android httprequest bufferedreader readline


【解决方案1】:

没有解析所有 html 并提取所需部分的默认方法。您可以将 webPage 中的所有 html 保存为字符串,然后使用如下代码解析字符串以获取价格:

String toFind = "product-card__price\">";
String str1 = webPage.substring(webPage.indexOf(toFind) + toFind.length());
String priceString = str1.substring(0, str1.indexOf("<"));
int price = Integer.parseInt(priceString.replaceAll("\\D+",""));

更新:

如果您在 html 中有多个要解析和保存的 div,则必须运行循环并根据需要对其进行解析,例如:

String to = "product-card__price\">";
String remainingText = webPage;
ArrayList<Integer> integers = new ArrayList<>();
while (remainingText.indexOf(to) >= 0) {
    String tokenString = remainingText.substring(remainingText.indexOf(to) + to.length());
    String priceString = tokenString.substring(0, tokenString.indexOf("<"));
    int price = Integer.parseInt(priceString.replaceAll("\\D+",""));
    integers.add(price);
    remainingText = tokenString;
}

【讨论】:

  • 抱歉,我已经更新了 httpRequest 的输出,httpRequest 的输出并不总是整数。知道吗?
  • 我已经更新了我的答案,现在检查!您可以像这样解析响应并得出价格!!
  • 嗨 Asif Mujteba,谢谢。这确实解决了我的问题,但我必须存储超过 1 个价格。因此我必须在 str1 之后执行另一个循环以保存所有价格,对吗?跨度>
  • 谢谢!!这真的很有帮助。抱歉这么长的问题,因为我还是 Android 编程的初学者。
【解决方案2】:

如果您确定每一行都是整数,而不仅仅是创建一个整数变量或数组(如果您有多行)并将字符串解析为整数:Integer.parseInt(data); 如果变量数据中有其他不是数字的字符,您可以使用正则表达式删除无数字:

data = data.replaceAll("\\D+","");

希望这能回答你的问题。

【讨论】:

  • 对不起,我已经更新了上面的httpRequest。每行不仅包含整数,还包含其他字符和符号。有什么想法吗?
猜你喜欢
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多