Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

ウィキペディア

ウィキペディアのページのHTMLを取得したいのですが出来ません。ウィキペディア以外のページは下記で取得できます。ウィキペディアは何か特別なのでしょうか?

void top(){
        BufferedReader br = null;
        try{
            URL u=new URL("http://ja.wikipedia.org/wiki/Java");
            br = new BufferedReader(new InputStreamReader(u.openStream(),"UTF-8"));
            
            while (br.ready()){
                String line=br.readLine();
                System.out.println(line);
            }    
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            if(br!=null){
                try{
                    br.close();
                }catch(IOException e){
                    e.printStackTrace();
                }    
                
            }
        }
    }

15

回答

81147

閲覧

15件の回答

評価

0

>出来ません。

ここをもっと詳しく書けば、見た人がコードをコピペして実行するこ
となく、答えられるかもしれないと考えてみよう。
質問する際のポイントは、今ある情報をできるだけまとめて出してみ
ること。

評価

0

これ以上詳しくはなりません。
表記したコードの、 System.out.println(line)で
HTMLソースが表示されると思いましたが、何も表示されず終了します。試しに、例えばここのURLをURLに指定するとちゃんとHTMLのソースが表示されます。

評価

0

なりませんって、なってるじゃん。
最初の書き込みじゃ「何も表示されず終了します」なんて分からんでしょ。
その程度のことだって違うよ。

ready()で判定せずに、lineがnullかどうかで判定しても同じ?

評価

0

$さんの指示通りに下記を
while (br.ready()){
 String line=br.readLine();
 System.out.println(line);
}
下記に
String line=null;
do{
 line=br.readLine();
 System.out.println(line);
}while (line!=null);
したら取得できました。
しかし、なぜ最初のコードでは取得できなかったのでしょうか?

評価

0

ストリームがスタンバイになるまで、時間がかかってるんじゃないの。

評価

0

そう言うことなんですか!
不良社員さんのを参考に調べてみたら、
String line;
while ((line = br.readLine()) != null) {
  System.out.println(line);
}
上記のような書き方が多いと言うことでした。
ありがとうございました。

評価

0

私は
for(String line=null;(line=br.readLine())!=null;)
でやってる。
lineの範囲をforループだけにできるから。

評価

0

特別問題がなければ、みんながパッと見て一瞬で判断できる汎用的なコードがいいと思いますが、どう思いますか?
そんなの人の勝手だろと言われればそれまでなのですが。

評価

0

その方が、コピペでぱくりやすいから?

どうでもいいよ。
そのくらい、自分で手を入れればいいじゃん。

評価

0

同じような働きをするコードなら、自分流のコードより
汎用的なコードのほうが、後々誰かがそのコードを見たときに時間的に早く理解することが出来るから、時間の無駄を省けると言っているだけです。

後、汎用的なコードなのでパクル必要はありません。

評価

0

じゃあ、スレ主さんの最初のコードを
いじって投稿してよ。

「こんな風に汎用的にしたら、
 これくらい理解が早くなる」

ってな感じで、
具体的に説明してもらえるかな。

評価

0

その動作をさせるための汎用的なコードがあるなら
自分流よりそっちのほうがいいでしょ、と言ってるだけですよ?そのほうが保守しやすいでしょ。そう思いませんか?

$さんが私は〜と言ったので、ちょっと意見しただけです。

ちなみに、スレ主さんのコードはよく見かけるので、何も言うことはありません。

評価

0

>$さんが私は〜と言ったので、ちょっと意見しただけです。

十分、一般的な記述でしょ。
自分流なんていわれにゃならんようなコードか?

評価

0

>みんながパッと見て一瞬で判断できる汎用的なコードがいい
ほとんどの場面において、それがいいと思うよ。

ただ、私の書いたコード程度が分かりづらいとしたら、もう少しいろ
んな人のコードを読んで勉強するほうがいい。
また、元のコードを否定していると読んだのなら、それは…。
もう少し平易に書くことも、やればできたけどね。

評価

0

私も初心者でこのようなloopを書いたことがありませんが、$さんのforを使った方が好きですね。

「この宣言なんだろう?」って探さなくていいですもんね。

先日、書いたコードを「難しいです」と言われてショックだったので、勉強になります。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。