javaについて
このプログラムは文字を入力して、検索をかけてその検索にかかった秒数を表示するものですが、検索数を表示するのにはどうしたらいいでしょうか?
import java.io.*;
import java.net.*;
public class Sample {
public static void main(String[] args) {
System.out.println("入力してください");
String keyword = getKeyword();
String htmlSrc = getHTMLSrc("http://search.yahoo.co.jp/search?p=" + keyword, "UTF-8");
double sec = getSearchSec(htmlSrc);
if (sec > 0) {
System.out.println("検索秒数は" + sec + "秒");
} else {
System.out.println("検索結果0件");
}
}
private static String getKeyword() {
String keyword = "";
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(System.in));
keyword = br.readLine();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
keyword = keyword.replaceAll(" ", "+");
return keyword;
}
private static String getHTMLSrc(String strURL, String charSet) {
StringBuffer sb = new StringBuffer();
HttpURLConnection conn = null;
BufferedReader br = null;
try {
URL url = new URL(strURL);
conn = (HttpURLConnection)url.openConnection();
InputStreamReader isr = new InputStreamReader(conn.getInputStream(), charSet);
br = new BufferedReader(isr);
String tmp = "";
while ((tmp = br.readLine()) != null) {
sb.append(tmp);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null) {
br.close();
}
if (conn != null) {
conn.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
private static double getSearchSec(String htmlSrc) {
double sec = 0;
String tmp = htmlSrc.replaceAll("<.+?>| ", "");
tmp = tmp.replaceAll(".*件-", "");
tmp = tmp.replaceAll("秒.*", "");
try {
sec = Double.parseDouble(tmp);
} catch (NumberFormatException e) {
}
return sec;
}
}
補足
回答ありがとうございます。 > closeの例外は、実は殆どの場合「開いてないのにcloseする」というケースだったりします つまり二重に close() を呼び出すようなコーディングをしてしまっている場合ということですか? その場合はコードに問題があるので、そもそも try / catch で対応するような状況ではないと思います。 また、何らかの事情で close() を複数回呼び出すことが避けられないような場合(=例外を握り潰すべき場合)と、 ANo.1氏が問題に対処するべきとした、「真の」close() 失敗の区別は飛んできた IOException を見て判断できるのでしょうか?