while((line = br.readLine) != null){}でwhileが終了しない

おまじないを信じたとき

public static String getString(){

        String result_string = new String();

        try{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in, "UTF-8"));
            String line = new String();

            while((line = br.readLine()) != (null)){
                System.out.println(result_string += line);
            }

            br.close();

        }catch(IOException e){
            
        }

        return result_string;
    }

問題は真ん中らへんのwhileのループ

            while((line = br.readLine()) != (null)){
                System.out.println(result_string += line);
            }

ここが終了しない。

そこで、いろんな書き方を試した

            while((line = br.readLine()) != ("")){
                System.out.println(result_string += line);
            }
            while(!(line = br.readLine()).equals(null)){
                System.out.println(result_string += line);
            }
            while(!(line = br.readLine()).equals("")){
                System.out.println(result_string += line);
            }

br.readLine()がStringなので、String.equals()を使ってみたが、変わらず動作しなかった。
もちろん、lineに代入せず、br.readLine()単体で上記の4パターンを試したが動作しなかった。

解決方法

BufferedReader.ready()を使う

public static String getString(){
        String result_string = new String();
       
        try{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in, "UTF-8"));

            while(br.ready()){
                System.out.orintln(result_string += br.readLine());
            }
            br.close();
        }catch(IOException e){

        }

        return result_string;

    }

このBufferedReader.ready()は、入力可能かどうかを返す関数です。
つまり、最後の行が読み込まれた次のループからfalseを返してくれるんですね。

            while(br.ready()){
                System.out.orintln(result_string += br.readLine());
            }

この書き方でできる・・・とでも思ったのか!!!!

できませんでした

System.inが呼ばれ続けるため、常に入力受付状態が続き、br.readLine()にnullが入らないというオチでした。

つまり、exitとか入力されると、その文字列を判別してwhileをbreakする条件分岐をつくってやればいいということですね。

でもそれだと、もし入力中にexitがあれば〜とか、別のシステムでも利用するとき、わざわざexitと打たなければならないという弊害も発生する。
そのため、別の方法を試した方がよさそうですね。

結論

(line = br.readLine()) != null  でよい。
しかし処理終了の文字を決めて、break()するしかない。