基本上,我试图使用HTTP GET请求从网站中提取数据。我创建了一个扫描程序,它查看从GET请求中提取的所有信息。我的问题是如何让扫描仪识别此所需模式中的浮点值范围。模式如下: "<strong>
x k</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>");
如您所见,我尝试连接一系列可接受的值,但我认为这不是正确的方法。有什么建议吗?
不要使用正则表达式来解析 HTML!! https://stackoverflow.com/a/1732454/1768232
改用 JSoup 或 JSoup 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
}
}
你在这里遇到的问题:
- 正则表达式在解析 HTML 时很糟糕。举个例子是,
<strong><foo/>30.0</strong>...
会失败你想出的任何合理的正则表达式,但可能应该在这里通过你的测试。我一直在 HTML 上使用正则表达式,但您应该记住,当您想向某人显示它未加载时,这就像用枪指着你的脚并扣动扳机。 - 您的代码在语法上无效。
Scanner#next
提出了一个String
论点。 -
[0-30]
是一个字符类,只匹配一个字符,即0
、1
、2
或3
之一。 可能不是你的意思。
正则表达式与"0.0 到 50.0 之间的数字"等内容不匹配。 最好匹配所有数字,然后让 Java 解析它们并将它们进行数字比较。