ここで説明するのは、Java スキャナ クラスの next メソッドと nextLine メソッドについてです。 next() メソッドと nextLine() メソッドとは何ですか?
問題が発生します:
まず次のコードを見てみましょう: 単純なコンソールの入出力:
プレーンコピーをクリップボードプリントに表示しますか?
パッケージ cn.nileader.app.vi;
java.util.Scannerをインポートします。
パブリック クラス テスト {
public static void main(String[] args) throws Exception{
スキャナー cin = 新しいスキャナー(System.in);
文字列 ni = cin.nextLine();
System.out.print("Scanner クラスの next() メソッドを使用して、入力した文字列「+ni+」、長さは「+ni.length()」を受け取ります。);
ni = cin.nextLine();
System.out.print("Scanner クラスの next() メソッドを使用して、入力した文字列「+ni+」、長さは「+ni.length()」を受け取ります。);
}
}
パッケージ cn.nileader.app.vi;
java.util.Scannerをインポートします。
パブリック クラス テスト {
public static void main(String[] args) throws Exception{
スキャナー cin = 新しいスキャナー(System.in);
文字列 ni = cin.nextLine();
System.out.print("Scanner クラスの next() メソッドを使用して、入力した文字列「+ni+」、長さは「+ni.length()」を受け取ります。);
ni = cin.nextLine();
System.out.print("Scanner クラスの next() メソッドを使用して、入力した文字列「+ni+」、長さは「+ni.length()」を受け取ります。);
}
}
次のコードをもう一度見てください。
プレーンコピーをクリップボードプリントに表示しますか?
パッケージ cn.nileader.app.vi;
java.util.Scannerをインポートします。
パブリック クラス テスト {
public static void main(String[] args) throws Exception{
スキャナー cin = 新しいスキャナー(System.in);
文字列 ni = cin.next();
System.out.print("Scanner クラスの next() メソッドを使用して、入力した文字列「+ni+」、長さは「+ni.length()」を受け取ります。);
ni = cin.next();
System.out.print("Scanner クラスの next() メソッドを使用して、入力した文字列「+ni+」、長さは「+ni.length()」を受け取ります。);
}
}
パッケージ cn.nileader.app.vi;
java.util.Scannerをインポートします。
パブリック クラス テスト {
public static void main(String[] args) throws Exception{
スキャナー cin = 新しいスキャナー(System.in);
文字列 ni = cin.next();
System.out.print("Scanner クラスの next() メソッドを使用して、入力した文字列「+ni+」、長さは「+ni.length()」を受け取ります。);
ni = cin.next();
System.out.print("Scanner クラスの next() メソッドを使用して、入力した文字列「+ni+」、長さは「+ni.length()」を受け取ります。);
}
}
上記のコード スニペットはすべて正しいですが、退屈です。
素晴らしいことがやって来ます...
次のコードを実行します。
プレーンコピーをクリップボードプリントに表示しますか?
パッケージ cn.nileader.app.vi;
java.util.Scannerをインポートします。
パブリック クラス テスト {
public static void main(String[] args) throws Exception{
スキャナー cin = 新しいスキャナー(System.in);
文字列 ni = cin.next();
System.out.println("Scanner クラスの next() メソッドを使用して、入力した文字列を受信します: "+ni+"、長さは "+ni.length());
ni = cin.nextLine();
System.out.print("Scanner クラスの next() メソッドを使用して、入力した文字列「+ni+」、長さは「+ni.length()」を受け取ります。);
}
}
パッケージ cn.nileader.app.vi;
java.util.Scannerをインポートします。
パブリック クラス テスト {
public static void main(String[] args) throws Exception{
スキャナー cin = 新しいスキャナー(System.in);
文字列 ni = cin.next();
System.out.println("Scanner クラスの next() メソッドを使用して、入力した文字列を受信します: "+ni+"、長さは "+ni.length());
ni = cin.nextLine();
System.out.print("Scanner クラスの next() メソッドを使用して、入力した文字列「+ni+」、長さは「+ni.length()」を受け取ります。);
}
}
実行結果は次のとおりです。
店主
Scanner クラスの next() メソッドを使用して、入力した文字列を受け取ります: ni shopkeeper、長さは 4
Scanner クラスの next() メソッドを使用して、入力した文字列を受け取ります。長さは 0 です。
Java Scanner の next メソッドと nextLine メソッドを併用すると終わりです。
2 番目の文字列を入力する機会はありません。 ! !
問題分析:
next メソッドと nextLine メソッドの明らかな違いは、前者は文字の「セグメント」を読み取るのに対し、後者は文字列の行を読み取ることです。
簡単に言えば、上記の現象の原因は主に next() メソッドの無責任によって引き起こされます。
next() メソッドの仕組み: (表面的に言えば)
特定の識別子 (スペースまたは改行文字 (n)) が見つかるまで行をスキャンし、その前の文字 (文字列) を取得します。
ここで見てください。最初の next() メソッドは「ni shopkeeper」を読み取りますが、「n」は読み取りません。改行も処理しません。その後、処理のために「n」を nextLine() にスローします。
ご存知のとおり、nextLine() は「お金を見る」タイプに属しており、「n」を見つけると受け入れ、空の文字列である n の前の内容をスキャンします。その後、何か問題が発生しました。
問題解決:
プレーンコピーをクリップボードプリントに表示しますか?
パッケージ cn.nileader.app.vi;
java.util.Scannerをインポートします。
パブリック クラス テスト {
public static void main(String[] args) throws Exception{
スキャナー cin = 新しいスキャナー(System.in);
文字列 ni = cin.next();
System.out.println("Scanner クラスの next() メソッドを使用して、入力した文字列を受信します: "+ni+"、長さは "+ni.length());
while( (ni = cin.nextLine()).equals("") ){}
System.out.print("Scanner クラスの next() メソッドを使用して、入力した文字列「+ni+」、長さは「+ni.length()」を受け取ります。);
}
}
パッケージ cn.nileader.app.vi;
java.util.Scannerをインポートします。
パブリック クラス テスト {
public static void main(String[] args) throws Exception{
スキャナー cin = 新しいスキャナー(System.in);
文字列 ni = cin.next();
System.out.println("Scanner クラスの next() メソッドを使用して、入力した文字列を受信します: "+ni+"、長さは "+ni.length());
while( (ni = cin.nextLine()).equals("") ){}
System.out.print("Scanner クラスの next() メソッドを使用して、入力した文字列「+ni+」、長さは「+ni.length()」を受け取ります。);
}
}
実行結果:
店主
Scanner クラスの next() メソッドを使用して、入力した文字列を受け取ります: ni shopkeeper、長さは 4
天才です
Scanner クラスの next() メソッドを使用して、入力した文字列を受け取ります: 彼は天才で、長さは 4
元の 2 番目の cin.nextLine() を入れます。
while( (ni = cin.nextLine()).equals("") ){} に変更します。
こうすることで、前行の「n」の影響を排除することができます。