Yang dibahas disini adalah tentang metode selanjutnya dan metode nextLine pada kelas pemindai java. Apa yang dimaksud dengan metode next() dan nextLine()?
Masalahnya terjadi:
Mari kita lihat kode berikut terlebih dahulu: Input dan output konsol sederhana:
lihat salinan biasa ke cetak papan klip?
paket cn.nileader.app.vi;
impor java.util.Scanner;
Tes kelas publik {
public static void main(String[] args) melempar Pengecualian{
Pemindai cin = Pemindai baru(Sistem.dalam);
String ni = cin.nextLine();
System.out.print("Gunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan: "+ni+" dan panjangnya adalah "+ni.length());
ni = cin.nextLine();
System.out.print("Gunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan: "+ni+" dan panjangnya adalah "+ni.length());
}
}
paket cn.nileader.app.vi;
impor java.util.Scanner;
Tes kelas publik {
public static void main(String[] args) melempar Pengecualian{
Pemindai cin = Pemindai baru(Sistem.dalam);
String ni = cin.nextLine();
System.out.print("Gunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan: "+ni+" dan panjangnya adalah "+ni.length());
ni = cin.nextLine();
System.out.print("Gunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan: "+ni+" dan panjangnya adalah "+ni.length());
}
}
Perhatikan kembali kode berikut ini:
lihat salinan biasa ke cetak papan klip?
paket cn.nileader.app.vi;
impor java.util.Scanner;
Tes kelas publik {
public static void main(String[] args) melempar Pengecualian{
Pemindai cin = Pemindai baru(Sistem.dalam);
String ni = cin.berikutnya();
System.out.print("Gunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan: "+ni+" dan panjangnya adalah "+ni.length());
ni = cin.berikutnya();
System.out.print("Gunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan: "+ni+" dan panjangnya adalah "+ni.length());
}
}
paket cn.nileader.app.vi;
impor java.util.Scanner;
Tes kelas publik {
public static void main(String[] args) melempar Pengecualian{
Pemindai cin = Pemindai baru(Sistem.dalam);
String ni = cin.berikutnya();
System.out.print("Gunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan: "+ni+" dan panjangnya adalah "+ni.length());
ni = cin.berikutnya();
System.out.print("Gunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan: "+ni+" dan panjangnya adalah "+ni.length());
}
}
Cuplikan kode di atas semuanya benar dan membosankan.
Hal yang menakjubkan akan datang...
Jalankan kode berikut:
lihat salinan biasa ke cetak papan klip?
paket cn.nileader.app.vi;
impor java.util.Scanner;
Tes kelas publik {
public static void main(String[] args) melempar Pengecualian{
Pemindai cin = Pemindai baru(Sistem.dalam);
String ni = cin.berikutnya();
System.out.println("Menggunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan adalah: "+ni+" dan panjangnya adalah "+ni.length());
ni = cin.nextLine();
System.out.print("Gunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan: "+ni+" dan panjangnya adalah "+ni.length());
}
}
paket cn.nileader.app.vi;
impor java.util.Scanner;
Tes kelas publik {
public static void main(String[] args) melempar Pengecualian{
Pemindai cin = Pemindai baru(Sistem.dalam);
String ni = cin.berikutnya();
System.out.println("Menggunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan adalah: "+ni+" dan panjangnya adalah "+ni.length());
ni = cin.nextLine();
System.out.print("Gunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan: "+ni+" dan panjangnya adalah "+ni.length());
}
}
Hasil yang berjalan adalah sebagai berikut:
pemilik toko
Gunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan: ni penjaga toko, panjangnya 4
Gunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan: panjangnya 0
Sudah berakhir, ketika metode Java Scanner next dan nextLine digunakan bersama-sama,
Anda tidak memiliki kesempatan untuk memasukkan string kedua! ! !
Analisis masalah:
Perbedaan nyata antara metode selanjutnya dan metode nextLine adalah bahwa metode pertama membaca "segmen" karakter, sedangkan metode berikutnya membaca sebaris string.
Sederhananya, alasan fenomena di atas terutama disebabkan oleh tidak bertanggung jawabnya metode next().
Cara kerja metode next(): (secara dangkal)
Pindai dari satu baris hingga Anda menemukan pengidentifikasi tertentu: spasi atau karakter baris baru (n), dan dapatkan karakter (string) sebelumnya.
Lihat di sini, metode next() pertama membaca "ni penjaga toko", tetapi tidak membaca "n", juga tidak bertanggung jawab atas jeda baris, lalu melemparkan "n" ke nextLine() untuk diproses.
Seperti yang Anda ketahui, nextLine() termasuk dalam tipe "melihat uang" yang menerima "n" ketika melihatnya, dan kemudian memindai konten sebelum n, yang merupakan string kosong. Lalu ada yang tidak beres.
Pemecahan masalah:
lihat salinan biasa ke cetak papan klip?
paket cn.nileader.app.vi;
impor java.util.Scanner;
Tes kelas publik {
public static void main(String[] args) melempar Pengecualian{
Pemindai cin = Pemindai baru(Sistem.dalam);
String ni = cin.berikutnya();
System.out.println("Menggunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan adalah: "+ni+" dan panjangnya adalah "+ni.length());
while( (ni = cin.nextLine()).sama dengan("") ){}
System.out.print("Gunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan: "+ni+" dan panjangnya adalah "+ni.length());
}
}
paket cn.nileader.app.vi;
impor java.util.Scanner;
Tes kelas publik {
public static void main(String[] args) melempar Pengecualian{
Pemindai cin = Pemindai baru(Sistem.dalam);
String ni = cin.berikutnya();
System.out.println("Menggunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan adalah: "+ni+" dan panjangnya adalah "+ni.length());
while( (ni = cin.nextLine()).sama dengan("") ){}
System.out.print("Gunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan: "+ni+" dan panjangnya adalah "+ni.length());
}
}
Hasil berjalan:
pemilik toko
Gunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan: ni penjaga toko, panjangnya 4
adalah seorang jenius
Gunakan metode next() dari kelas Scanner untuk menerima string yang baru saja Anda masukkan: Dia jenius dan panjangnya 4
Masukkan cin.nextLine() kedua yang asli
Ubah menjadi while( (ni = cin.nextLine()).equals("") ){}
Dengan cara ini, pengaruh "n" pada baris sebelumnya dapat dihilangkan.