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()するしかない。