働いたら負けかなと思ってる

~全力でニートになる~

java.util.ScannerクラスのnextとnextLineの違い

以前のブログで書いたJavaの標準入力におけるnextとnextLineの違いについて簡単に記載します。

 

標準入力では文字列として認識させる方法として主に2通りあります。

それがnextとnextLineになります。

例1

Scanner sc = new Scanner(System.in);
String a = sc.next();

Scanner sc = new Scanner(System.in);
String b = sc.nextLine();

 

例1の場合はどちらで入力を行ってもa、bに格納されるのは文字列になります。

この違いを簡単に言うと、空白を認識するか空白までを認識するかの違いになります。

 

next:入力された値を”改行”までの範囲で認識します。

nextLine:入力された値を”空白”までの範囲で認識します。

 

これだけの説明だとわかりにくいと思うので少し例を出してみます。

入力値が”99 あああ”だった場合

nextの場合は空白までの値が認識されるためaには”99”が代入されることになります。

nextLineは空白も文字列として認識されるためbには”99 あああ”が代入されます。

 

空白を認識させたいかさせたくないかで使い分けるわけですが、nextは応用すると一度の入力で複数の値を識別することが可能となります。

例1を少し書き直します。

 

例2

Scanner sc = new Scanner(System.in);
String a = sc.next();
String b = sc.next();

 

bもnextに変えてみました。(一行削除している理由は特に考えないように)

この状態で”99 あああ”と入力します。

そうすると1度の入力でaには”99”、bには”あああ”が代入されます。

 

イメージを持ってもらえるように解説してみます。(解説はイメージです。厳密に言えば違うことを書いてますがあしからず)

nextを用いると値の入力を求められますが、入力した値はいったんscの中に格納されます。

つまりscの中には”99 あああ”が一時的に入っていると思って下さい。

その中からnextは空白までの値なので”99”が取り出されaに代入されます。(この時に空白は削除されます)

しかしscの中には”あああ”は残っている状態になります。

なので次にnextを実行するとscに残っている”あああ”がbに代入されます。

(ちなみにscの中身がない状態でnextを実行するとコンソール入力を求められることになります。なので、最初はscも空なのでコンソール入力をする必要があるわけです。)

 

for文のような繰り返しを用いると複数の値を一気に変数や配列に格納することが可能です。

他にもいろいろと使い方があるので、調べてみると面白いですよ!