java入力has Next()とhas Nextline()メソッドの違い

2781 ワード

最近勉強していますが、牛客ネットの上でアルゴリズムの練習問題をやっています。いくつかの状況で書いたJavaコードは本機の運行時に正常な結果です。検査の結果、最終的に試験用例を読み取る位置に位置決めしました。
Scanner scanner = new Scanner(System.in);
//     hasNextLine              
//    
while(scanner.hasNextLine()){
	// TODO:implement code
}
//    hasNextLine     hasNext()    
//       
while(scanner.hasNext()){
	// TODO:implement code
}
オンラインで検索することで、この2つの方法の違いが得られます。入力ストリームをチェックする場合:
  • hasNext()方法は、次の非空文字があるかどうかを判断します。ある場合はtrueに戻ります。そうでなければfalse
  • に戻ります。
  • hasNextLine()方法は、行マッチングモードに基づいて、次の行(空白行を含む)があるかどうかを判断し、ある場合はtrueに戻り、さもなければfalse
  • に戻る。
    例えば、現在は次のようなテスト用の例があります。
    7 15 9 5
    
    このテストケースは牛客ネット上にファイルとして保存されていますが、linuxシステムではファイルの最後に改行符
    があります。つまりSystem.inから入力されたストリームの中で本当に読み取られたデータストリームはこのようになります。
    7 15 9 5
    プログラムは、5を処理した後、入力ストリームに1つの改行符
    だけが残っています。5を処理した後、whileはループ判定を行います。このとき、hasNext()方法とhasNextLine()方法で判断した結果に違いが生じます。
  • hasNext()方法は、後で非空の文字がないと、false
  • に戻ります。
  • hasNextLine()方法では、改行
    は空行であり、行のマッチングモードに該当するとtrueに戻りますが、実際にはその後、データがないため、入力ストリームを読み取る際に異常が発生し、運行エラーが発生します。
  • 提案:hasNextXxxx()を採用するなら、後もnextXxxx()を使用します。
  • 例えば、前のhasNextLine()を使用すると、後の入力はnextLine()で処理されます。
  • の後にnextInt()の方法を使うと、前にhasNext()の方法を使って判断します。
  • 参考資料:
    ojのjava入力has Nextとhas NextLineはovのjava入力has Nextとhas Next Lineを区別します。