基本上,我正在尝试使用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>");
正如您所看到的,我尝试连接一系列可接受的值,但我认为这不是正确的方法。有什么建议吗?
答案 0 :(得分:2)
不要使用正则表达式来解析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
}
}
答案 1 :(得分:1)
你在这里遇到的问题:
<strong><foo/>30.0</strong>...
将失败你提出的任何合理的正则表达式,但应该在这里通过你的测试。我一直在HTML上使用正则表达式,但是你应该记住,当你想向某人展示它没有加载时,就像把枪指向你的脚并扣动扳机一样。Scanner#next
需要String
个参数。[0-30]
是一个字符类,只匹配一个0
,1
,2
或3
之一的字符。可能不是你的意思。正则表达式与“0.0到50.0之间的数字”之类的东西不匹配。最好匹配所有数字,然后让Java解析它们并用数字进行比较。