JavaRush /Java Blog /Random-ID /Kelas pemindai di Java

Kelas pemindai di Java

Dipublikasikan di grup Random-ID
Halo! Pelajaran kita hari ini akan istimewa! Sebelumnya, ketika memecahkan masalah dan menulis program, algoritmenya sederhana: kita menulis beberapa kode, menjalankan metode main() , program melakukan apa yang diminta, dan keluar. Tapi sekarang semuanya akan berubah! Hari ini kita akan belajar bagaimana berinteraksi secara nyata dengan program: kita akan mengajarkannya untuk merespons tindakan kita! Anda mungkin sudah memahami tujuan kami dalam hal ini. Kuliah ini akan kami curahkan untuk analisis mendetail dari salah satu kelas bahasa Java – Pemindai. Kelas ini akan berguna jika Anda perlu membaca data yang dimasukkan pengguna. Sebelum kita melanjutkan mempelajari kodenya, beri tahu saya, pernahkah Anda menemukan perangkat seperti pemindai? Tentunya ya. Struktur internal pemindai cukup rumit, tetapi esensi kerjanya cukup sederhana: ia membaca data yang dimasukkan pengguna ke dalamnya (misalnya, paspor atau polis asuransi) dan menyimpan informasi yang dibaca dalam memori (misalnya, misalnya , dalam bentuk gambar). Jadi, hari ini Anda akan membuat pemindai Anda sendiri! Tentu saja, dia tidak bisa menangani dokumen, tapi dia bisa menangani informasi teks dengan cukup baik :) Ayo!Kelas pemindai - 1

Kelas Pemindai Java

Hal pertama dan terpenting yang perlu kita kenali adalah kelasnya java.util.Scanner. Fungsinya sangat sederhana. Seperti pemindai sungguhan, ia membaca data dari sumber yang Anda tentukan. Misalnya dari baris, dari file, dari konsol. Kemudian ia mengenali informasi ini dan memprosesnya sesuai kebutuhan. Mari kita berikan contoh paling sederhana:
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("I love you, Petra creation,\n" +
               "I love your stern, slim look,\n" +
               "Neva sovereign current,\n" +
               "Coastal granite");
       String s = scanner.nextLine();
       System.out.println(s);
   }
}
Kami membuat objek pemindai dan menentukan sumber datanya (string dengan teks). Metode ini nextLine()mengakses sumber data (teks kami dengan kuatrain), menemukan baris berikutnya yang belum dibaca (dalam kasus kami, yang pertama) dan mengembalikannya. Setelah itu kita output ke konsol: Output konsol:

Люблю тебя, Peterа творенье,
Kita dapat menggunakan metode ini nextLine()beberapa kali dan menampilkan keseluruhan puisi:
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("I love you, Petra creation,\n" +
               "I love your stern, slim look,\n" +
               "Neva sovereign current,\n" +
               "Coastal granite");
       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 akan maju satu langkah dan membaca baris berikutnya. Hasil dari program ini adalah output ke konsol:

Люблю тебя, Peterа творенье,
Люблю твой строгий, стройный вид,
Невы державное теченье,
Береговой ее гранит
Seperti yang telah kami katakan, sumber data untuk pemindai tidak hanya berupa string, tetapi juga, misalnya, konsol. Berita penting bagi kita: jika sebelumnya kita hanya mengeluarkan data disana, sekarang kita akan memasukkan data dari keyboard! Mari kita lihat apa lagi yang dapat dilakukan oleh kelas Scanner :
public class Main {

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

   }
}
Metode ini nextInt()membaca dan mengembalikan nomor yang dimasukkan. Dalam program kami, ini digunakan untuk memberikan nilai pada variabel number. Ini lebih mirip pemindai sungguhan! Program ini meminta pengguna untuk memasukkan nomor apa pun ke dalam satu baris. Setelah pengguna melakukan ini, program mengucapkan terima kasih, menampilkan hasil kerjanya di konsol dan berakhir. Tapi kita masih punya satu masalah serius. Pengguna mungkin membuat kesalahan dan memasukkan sesuatu yang salah. Berikut ini contoh kapan program kami saat ini berhenti bekerja:
public class Main {

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

   }
}
Mari kita coba memasukkan string “JavaRush” sebagai pengganti angka: Output konsol:
Enter the number:
JavaRush
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
Ups, semuanya buruk -_- Untuk menghindari situasi seperti itu, kita perlu menemukan cara untuk memvalidasi data yang dimasukkan pengguna. Misalnya pengguna memasukkan apa pun selain angka, alangkah baiknya jika ditampilkan peringatan di konsol bahwa informasi yang dimasukkan bukan angka, dan jika semuanya beres, tampilkan teks konfirmasi. Namun untuk melakukan hal ini, kita sebenarnya perlu “melihat ke masa depan” – mencari tahu apa yang akan terjadi selanjutnya dalam aliran kita. Bisakah Pemindai di Java melakukan ini? Bagaimana dia bisa! Dan untuk ini ia memiliki seluruh kelompok metode: hasNextInt()- metode ini memeriksa apakah bagian berikutnya dari data yang dimasukkan adalah angka atau bukan (masing-masing mengembalikan benar atau salah). hasNextLine()— memeriksa apakah bagian data berikutnya adalah string. hasNextByte(), hasNextShort(), hasNextLong(), hasNextFloat(), hasNextDouble()- semua metode ini melakukan hal yang sama untuk tipe data lainnya. Mari kita coba mengubah program kita untuk membaca angka:
public class Main {

   public static void main(String[] args) {

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

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

   }
}
Sekarang program kita memeriksa apakah karakter selanjutnya yang dimasukkan adalah angka atau bukan. Dan hanya jika ya, konfirmasi akan ditampilkan. Jika masukan tidak lulus tes, program akan memperhatikan hal ini dan meminta Anda untuk mencoba lagi. Intinya, Anda dapat berkomunikasi dengan objek Scanner dan mengetahui terlebih dahulu tipe data apa yang diharapkan. “Hei, pemindai, apa selanjutnya? Nomor, string, atau yang lainnya? Nomor? Dan yang mana - int, short, long?” Fleksibilitas ini memberi Anda kesempatan untuk membangun logika program Anda bergantung pada perilaku pengguna. Metode penting lainnya yang patut diperhatikan adalah useDelimiter(). Metode ini meneruskan string yang ingin Anda gunakan sebagai pembatas. Misalnya, kami tiba-tiba tertarik pada puisi Jepang dan memutuskan untuk menggunakan pemindai untuk membaca beberapa haiku penyair besar Matsuo Basho. Sekalipun tiga ayat berbeda diberikan kepada kita dalam satu baris yang tidak jelas, kita dapat dengan mudah memisahkannya dan memformatnya dengan baik:
public class Main {
   public static void main(String[] args) {
       Scanner scan = new Scanner("On a Bare Branch" +
               "Raven sits alone.'" +
               "Autumn evening." +
               "''***''" +
               "There's such a moon in the sky,'" +
               "Like a tree cut down at the root:'" +
               "A fresh cut turns white." +
               "''***''" +
               "How the river has overflowed!" +
               "The heron wanders on short legs,'" +
               "Knee-deep in water.");

       scan.useDelimiter("'");

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

       scan.close();
   }
}
Kami menggunakan metode useDelimeter() dari kelas Scanner sebagai pemisah garis : metode ini bertanggung jawab untuk membagi data yang masuk menjadi beberapa bagian. Dalam kasus kami, tanda kutip tunggal ( "'" ) dilewatkan sebagai argumen dan digunakan untuk memisahkan string . Teks setelah kutipan ini muncul pada baris baru karena dalam perulangan while kita menggunakan metode println() dari kelas Sistem untuk membaca data. Hasilnya, kita akan mendapatkan keluaran yang indah di konsol, seperti di buku:
На голой ветке
Ворон сидит одиноко.
Осенний вечер.

*** 
 
В небе такая луна,
Словно дерево спилено под корень:
Белеет свежий срез.

*** 
 
Как разлилась река!
Цапля бредет на коротких ножках,
По колено в воде.
Dalam contoh yang sama, ada metode lain yang harus Anda perhatikan - close(). Seperti objek apa pun yang bekerja dengan aliran I/O, pemindai harus ditutup setelah menyelesaikan pekerjaannya sehingga tidak lagi menghabiskan sumber daya komputer kita. Jangan pernah lupa metodenya close()!
public class Main {

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

       sc.close();//Now we did everything right!

   }
}
Itu saja! Seperti yang Anda lihat, kelas Scanner cukup mudah digunakan dan sangat berguna! :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION