今朝、マーヴェリックのガソリンスタンドのすべてのガソリン価格を配列に解析する小さなプロジェクトに取り組みたいと思いました。私のコードで「汚れている」と感じる唯一の部分は、変数へのhtmlの実際の解析です。必要なデータを取得するために indexOf と部分文字列を使用していますが、それを行うためのよりクリーンな方法が必要だと感じていますか? とにかく、これが私のコードです。コンパイルしてうまく動作しますが、私が望むほどきれいではありません。
maverik.javaには、メイン メソッドとプロジェクトのコードの大部分が含まれています。 maverikObj.javaには、ゲッターとセッター、コンストラクター、および 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 つしか含まれていないため、少し複雑になります。したがって、このデータを解析するために、2 つの方法を使用しました。
住所、都市、州、電話番号は、次を使用して解析されます。
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 double を記録します。これは、コンストラクターがすべての燃料タイプに何らかの値を持つ必要があるためです。
if(line.indexOf("Unleaded:")>0){
unleaded=Double.parseDouble(line.substring(line.indexOf("Unleaded:")+147, line.indexOf("Unleaded:")+152));
}
else{
unleaded=0.0;
}
ご覧のとおり、必要なデータを取得するために多くの部分文字列と indexOf 文字列メソッドを使用しています。私の懸念は、これが私が望むデータを取得するための非常に静的な方法であることです。コードをクリーンアップする方法についてのヒントをいただければ幸いです。=)