0

基本上,我试图通过使用 HTTP GET 请求从网站中提取数据。我创建了一个扫描器,它查看从 GET 请求中提取的所有信息。我的问题具体是如何让扫描仪识别此所需模式内的一系列浮点值。模式如下: "<strong>xk</strong> <div class="match_details_cell_label">Gold</div>"

上面的字母 x 表示可以在 [0.0-50.0] 范围内的浮点数。我的问题是我如何向扫描仪表示这一点。我熟悉如何检查整数是否在一组值内,但是如何在扫描时结合“范围”的概念?

    GetGameInfo http = new GetGameInfo();

    System.out.println("Testing 1 - Send Http GET request");
    Scanner lolscan = new Scanner(http.sendGet());
    String gameGold = 
            lolscan.next("<strong>" + [0-30] + "k</strong><div class=\"match_details_cell_label\">Gold</div>");

如您所见,我尝试连接一系列可接受的值,但我认为这不是正确的方法。有什么建议么?

4

2 回答 2

2

不要使用正则表达式来解析 HTML!https://stackoverflow.com/a/1732454/1768232

请改用JSoupJSoup Maven,例如:

List<Double> doubles = new LinkedList<>();
Document doc = Jsoup.connect(url).get();
Elements elem = doc.select("strong");
for(Element element : elem) { 
    try {
        doubles.add(Double.valueOf(elem.text()));
    } catch (NumberFormatException e) {
        // handle it
    }
}
于 2013-10-21T20:30:12.930 回答
1

您在这里遇到的问题:

  1. 正则表达式不擅长解析 HTML。只有一个例子是它<strong><foo/>30.0</strong>...会失败你想出的任何合理的正则表达式,但可能应该在这里通过你的测试。我一直在 HTML 上使用正则表达式,但你应该记住,当你想向某人显示它没有加载时,这就像用枪指着你的脚并扣动扳机。
  2. 您的代码在语法上无效。 Scanner#next接受一个String论点。
  3. [0-30]是一个字符类,恰好匹配一个字符,它是0123. 可能不是你的意思。

正则表达式不适合“0.0 到 50.0 之间的数字”之类的内容。最好匹配所有数字,然后让 Java 解析它们并进行数字比较。

于 2013-10-21T20:39:11.223 回答