今天早上,我决定做一个小项目,将 maverik 加油站的所有汽油价格解析成一个数组。我的大部分工作相当容易,我觉得我的代码中唯一“脏”的部分是将 html 实际解析为变量。我正在使用 indexOf 和子字符串来获取我想要的数据,我觉得必须有一种更清洁的方法来做到这一点?无论如何,这是我的代码,它可以编译并且工作得很好,只是不像我想要的那样干净。
maverik.java包含项目的主要方法和大部分代码。 maverikObj.java包含 getter 和 setter、构造函数和 toString 方法。
要更改从您获取控制台数据的加油站,只需更改 maverik.java 的第 90 行上的数组 println 中的数字。未来的修订版将具有根据用户请求控制显示哪些数据的方法。
这是一个带有价格的示例 HTML:
html4 = "<b>Maverik Store 4</b><br/>5200 Chinden Blvd<br>Boise, ID<br>208-376-0532<br><center><b></b></center><br /><font color=red>Fuel Prices -- Updated every 30 minutes</font><br /><div><div style=\"float: left; width: 70%; text-align:right;\">Adventure Club Card</div><div style=\"float: right; width: 30%; text-align:center;\">Retail</div><br /><div style=\"float: left;width: 30%;\">Unleaded:</div><div style=\"float: left; width: 30%; text-align:center;\"> 3.379</div><div style=\"float: right; width: 30%; text-align:center;\"> 3.399</div><br /><div style=\"float: left;width: 30%;\">Blend 89:</div><div style=\"float: left; width: 30%; text-align:center;\"> 3.469</div><div style=\"float: right; width: 30%; text-align:center;\"> 3.499</div><br /><div style=\"float: left;width: 30%;\">Blend 90:</div><div style=\"float: left; width: 30%; text-align:center;\"> 3.549</div><div style=\"float: right; width: 30%; text-align:center;\"> 3.579</div><br /><div style=\"float: left;width: 30%;\">Premium:</div><div style=\"float: left; width: 30%; text-align:center;\"> 3.599</div><div style=\"float: right; width: 30%; text-align:center;\"> 3.639</div><br /><div style=\"float: left;width: 30%;\">Diesel:</div><div style=\"float: left; width: 30%; text-align:center;\"> 4.039</div><div style=\"float: right; width: 30%; text-align:center;\"> 4.059</div>";
目前我正在解析地址、城市、州、电话号码以及每个站点可能的所有 8 种气体类型。(无铅、混合 87、88、89、99、优质、柴油)。但它变得有点棘手,因为一些 html 条目没有列出所有 8 个,大多数只有 8 种可能的燃料类型中的 4 或 5 种。因此,为了解析这些数据,我使用了两种方法。
地址、城市、州、电话号码使用以下方式解析:
if(line.contains(" = \"<b>Maverik Store")&&!line.contains("Coming Soon!")){
address=splitLine[3].substring(0,splitLine[3].length()-3).replace(" ", " ");
city=splitLine[4].substring(0,splitLine[4].length()-7);
state=splitLine[4].substring(splitLine[4].length()-5,splitLine[4].length()-3);
phone=splitLine[5].substring(0,splitLine[5].length()-3);
使用 if else 语句解析燃料类型,使用 if 语句记录数据(如果存在),使用 else 语句记录 0.0 双精度值,因为我的构造函数要求所有燃料类型都有一些值。
if(line.indexOf("Unleaded:")>0){
unleaded=Double.parseDouble(line.substring(line.indexOf("Unleaded:")+147, line.indexOf("Unleaded:")+152));
}
else{
unleaded=0.0;
}
如您所见,我使用了很多子字符串和 indexOf 字符串方法来获取我想要的数据。我担心这是获取我想要的数据的一种极其静态的方法,因此我觉得这是一种非常肮脏的做事方式。任何关于如何清理我的代码的提示都非常感谢!=)