CodeGym /Java Blog /Acak /Kelas Pemindai Java
John Squirrels
Level 41
San Francisco

Kelas Pemindai Java

Dipublikasikan di grup Acak
Hai! Pelajaran kita hari ini akan istimewa! Dalam pelajaran hari ini, kita akan membahas tentang Kelas Pemindai Java. Sebelumnya, proses menyelesaikan tugas dan menulis program sederhana: kami menulis beberapa kode, menjalankan main()metode, program melakukan apa yang diperlukan, dan kami selesai. Tapi sekarang semuanya akan berubah! Hari ini kita akan belajar bagaimana benar-benar berinteraksi dengan program: kita akan mengajarinya bagaimana menanggapi tindakan kita! Sebelum kita mulai menganalisis kode, apakah Anda pernah berurusan dengan perangkat seperti pemindai? Mungkin. Bagian dalam pemindai cukup rumit, tetapi ide dasar cara kerjanya sangat sederhana: pemindai membaca data yang diberikan pengguna (seperti paspor atau polis asuransi) dan menyimpan informasi ini di memori (misalnya, sebagai gambar ). Hari ini Anda akan membuat pemindai sendiri! Tentu saja, itu tidak akan dapat menangani dokumen kertas, tetapi teks tidak akan menjadi masalah untuk itu :) Ayo pergi!

Kelas Pemindai Java

Kelas pemindai - 1Pertama dan terpenting, kita harus mengenal kelas java.util.Scanner . Fungsionalitasnya sangat sederhana. Seperti pemindai sungguhan, ia membaca data dari sumber yang Anda tentukan. Misalnya, string, file, konsol. Selanjutnya, ia mengenali informasi dan memprosesnya dengan tepat. Inilah contoh paling sederhana:

public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       String s = scanner.nextLine();
       System.out.println(s);
   }
}
Kami telah membuat objek pemindai, dan menentukan sumber datanya (serangkaian teks). Metode nextLine() mengakses sumber data (teks kita dengan syair), menemukan baris berikutnya yang belum dibaca (yang merupakan baris pertama dalam kasus ini), dan mengembalikannya. Kemudian kami menampilkannya di konsol: Keluaran konsol:

It matters not how strait the gate,
Kita dapat menggunakan metode nextLine() beberapa kali dan menampilkan seluruh kutipan puisi:

public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       String s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
   }
}
Setiap kali, pemindai kami mengambil satu langkah ke depan dan membaca baris berikutnya. Output program ditampilkan:

It matters not how strait the gate, 
How charged with punishments the scroll, 
I am the master of my fate, 
I am the captain of my soul
Seperti yang telah kami katakan, sumber data pemindai tidak harus berupa string. Misalnya, bisa jadi konsol. Beberapa berita menarik untuk Anda: sebelumnya, kami hanya menampilkan data di sana, tetapi sekarang kami akan membaca data dari keyboard! Mari kita lihat apa lagi yang dilakukan kelas Pemindai :

public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
Metode nextInt() membaca dan mengembalikan nomor yang dimasukkan. Dalam program kami, kami menggunakannya untuk menetapkan nilai ke variabel number . Ini sudah lebih seperti pemindai sungguhan! Program meminta pengguna untuk memasukkan nomor apa pun. Setelah pengguna melakukan ini, program berterima kasih kepada pengguna, menampilkan hasilnya, dan selesai. Tapi kita masih punya masalah serius. Pengguna mungkin membuat kesalahan dan memasukkan sesuatu yang salah. Berikut adalah contoh di mana program kami saat ini berhenti berfungsi:

public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
Mari kita coba masukkan string "CodeGym" sebagai ganti angka: Keluaran konsol:

Enter a number: 
CodeGym 
Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Scanner.java:864) 
at java.util.Scanner.next(Scanner.java:1485) 
at java.util.Scanner.nextInt(Scanner.java:2117) 
at java.util.Scanner.nextInt(Scanner.java:2076) 
at Main.main(Main.java:10) Process finished with exit code 1
Uh oh. Kami dalam masalah besar -_- Untuk menghindari situasi seperti itu, kami perlu menemukan cara untuk memverifikasi data yang dimasukkan oleh pengguna. Misalnya, jika pengguna memasukkan apa pun selain angka, sebaiknya tampilkan peringatan bahwa informasi yang dimasukkan bukan angka. Dan jika informasinya oke, baru bisa kami konfirmasi. Tapi ini mengharuskan kami untuk "melihat ke masa depan" untuk melihat apa yang akan terjadi di aliran kami. Bisakah Pemindai melakukan ini? Dan bagaimana! Dan ada banyak metode untuk melakukan ini: hasNextInt() — Metode ini memeriksa apakah potongan data input berikutnya berupa angka (mengembalikan benar atau salah, yang sesuai). hasNextLine() — Metode ini memeriksa apakah potongan input berikutnya adalah string. hasNextByte() ,hasNextShort() , hasNextLong() , hasNextFloat() , hasNextDouble() — Semua metode ini melakukan pemeriksaan serupa untuk tipe data yang tersisa. Mari coba ubah program membaca angka kita:

public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       if (sc.hasNextInt()) {
           int number = sc.nextInt();
           System.out.println("Thanks! You entered the number " + number);
       } else {
           System.out.println("Sorry, but this is clearly not a number. Restart the program and try again!");
       }

   }
}
Sekarang program kami memeriksa apakah karakter yang dimasukkan berikutnya adalah angka. Dan itu hanya menampilkan konfirmasi jika ya. Jika input tidak lolos pemeriksaan, program mencatat dan meminta pengguna untuk mencoba lagi. Pada dasarnya, Anda dapat berkomunikasi dengan objek Pemindai dan mencari tahu terlebih dahulu tipe data apa yang menanti Anda. Angka, string, atau yang lainnya? Sebuah angka? Dan jenis apa? Int , short , long ?" Fleksibilitas ini memberi Anda kesempatan untuk membangun logika program yang bergantung pada perilaku pengguna. Kita harus mencatat metode penting lainnya: useDelimiter() . Anda meneruskan string ke metode ini. String berisi karakter yang ingin Anda gunakan sebagai pemisah atau pembatas. Misalnya, kita tiba-tiba tertarik pada puisi Jepang, dan memutuskan untuk menggunakan pemindai kita untuk membaca beberapa haiku yang ditulis oleh penyair besar Matsuo Bashō. Bahkan jika tiga ayat berbeda disampaikan kepada kita sebagai satu string yang aneh, kita dapat dengan mudah membaginya dan menerjemahkannya dengan indah:

public class Main {
   public static void main(String[] args) {
       Scanner scan = new Scanner("On a withered branch'" +
               "A crow has alighted.'" +
               "Nightfall in autumn." +
               "''***''" +
               "Such a moon above,'" +
               "Like a tree cut at the root:'" +
               "he fresh cut is white." +
               "''***''" +
               "How the river floods!'" +
               "A heron wanders on short legs,'" +
               "Knee-deep in the water.");

       scan.useDelimiter("'");

       while (scan.hasNext()) {
           System.out.println(scan.next());
       }

       scan.close();
   }
}
Kami menggunakan "\ n /*/*/*" (karakter baris baru dan tiga tanda bintang) sebagai pembatas kami. Hasilnya, kami memiliki keluaran konsol yang bagus, seperti di buku:
On a withered branch 
A crow has alighted. 
Nightfall in autumn. 

*** 

Such a moon above, 
Like a tree cut at the root: 
The fresh cut is white. 

*** 

How the river floods! 
A heron wanders on short legs, 
Knee-deep in the water.
Contoh ini memiliki satu metode lagi yang harus kita tunjukkan: close() . Seperti objek apa pun yang bekerja dengan aliran I/O, pemindai harus ditutup saat selesai sehingga berhenti menghabiskan sumber daya komputer. Jangan pernah melupakan metode close() !

public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);
      
       sc.close(); // Now we've done everything right!

   }
}
Itu dia! Seperti yang Anda lihat, betapa membantunya, kelas Pemindai cukup mudah digunakan! :) Untuk memperkuat apa yang Anda pelajari, kami sarankan Anda menonton video pelajaran dari Kursus Java kami

Lebih banyak bacaan:

Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION