10. Masukan standar dengan Java Scanner (Tutorial KOTLIN - Bahasa Indonesia)

 

Terkadang, tidak cukup menggunakan readln() untuk membaca data dari input standar. readln() adalah metode sederhana, tidak cocok untuk tugas-tugas kompleks, misalnya: menemukan hanya Integer atau hanya Ganda dalam aliran data, membaca data secara berurutan, kata demi kata, dan mengontrol pembacaan tersebut langkah demi langkah. Dalam topik ini, Anda akan mempelajari salah satu alat Java yang juga dapat digunakan di Kotlin — Scanner.

 

Apa itu Java Scanner?

 

Scanner adalah cara lain untuk mendapatkan data dari input standar. Anda dapat mengaksesnya langsung dari Kotlin karena dapat dioperasikan dengan pustaka Java lainnya. Pemindai memungkinkan program untuk membaca nilai dari tipe yang berbeda (string, angka, dll.) dari input standar.

 

Untuk menggunakannya, Anda perlu menambahkan pernyataan import berikut ke bagian atas file Anda dengan kode sumber:

 

 import java.util.Scanner

 

 atau

 

import java.util.*

 

 

Anda dapat menggunakan salah satu metode untuk menambahkan Scanner ke program Anda. Kita akan membahas mengimpor lebih detail nanti.

 

 Mari buat variabel yang diinisialisasi oleh Scanner:

 

val scanner = Scanner(System.`in`)

 

Di baris ini, System.`in` adalah objek yang mewakili aliran input standar. Scanner membungkusnya sebagai sumber data internal dan menyediakan serangkaian metode mudah untuk bekerja dengannya. Tentu saja, Anda dapat menggunakan Scanner(System.`in`) dalam kode Anda alih-alih membuat variabel Scanner, tetapi menggunakan satu variabel adalah cara yang lebih nyaman dan mudah dibaca untuk melakukannya.

 

Sekarang kita dapat membaca data dari input standar:

 

val line = scanner.nextLine() // read a whole line, e.g., "Hello, Kotlin"
val num = scanner.nextInt()   // read a number, e.g., 123
val string = scanner.next()   // read a string, e.g., "Hello"

 

scanner.next() hanya membaca satu kata, bukan baris. Jika pengguna memasukkan Hello, Kotlin, itu hanya akan membaca Hello,.

 

Setelah Anda memanggil scanner.nextLine() atau scanner.nextInt() atau yang serupa, program akan mengantisipasi input data. Berikut adalah contoh data input yang benar:

 

Hello, Kotlin
123 Hello

 

Contoh input di bawah ini juga valid:

 

Hello, Kotlin
123
Hello

 

Dimungkinkan untuk membaca angka sebagai string menggunakan scanner.next() atau scanner.nextLine() jika nomor tersebut berada di baris baru.

 

Selain itu, tipe Scanner menyediakan beberapa metode (fungsi) untuk membaca nilai tipe lain. Lihat dokumentasi Class Scanner untuk detail lebih lanjut.

 

Program di bawah membaca dua angka dan mengeluarkannya dalam urutan terbalik pada dua baris berbeda:

 

import java.util.Scanner // a class (type) from the Java standard library

fun main() {
    val scanner = Scanner(System.`in`) // membaca data

    val num1 = scanner.nextInt() // membaca angka pertama
    val num2 = scanner.nextInt() // membaca angka kedua

    println(num2) // mencetak angka kedu
    println(num1) // mencetak angka pertama
}

 

Ok, sekarang kita sudah membaca datanya dan tidak membutuhkan Scanner lagi. Saat  menggunakan readln(),  hanya melanjutkan dengan kode  dan bergerak lebih jauh. Tetapi Scanner dapat menghabiskan sumber daya PC setiap saat. Untuk menghentikannya, kita perlu menggunakan metode cancel(), yang... membatalkan Scanner.

 

scanner.cancel()

 

 

Pembatas kustom

 

Satu hal penting: kita bisa input data langsung di Scanner. Mari kita lihat:

 

val scanner = Scanner("123_456")

 

Tapi bagaimana kita bisa membaca kata berikutnya jika kita tidak memiliki spasi atau baris baru? Untuk kasus ini, Scanner memiliki alat  — useDelimiter(). Dengan bantuannya, kita dapat menyesuaikan pembatas kita untuk metode seperti next(), nextInt(), dll. (nilai default pembatas adalah spasi).

 

Untuk membaca kata dan bilangan bulat ini secara terpisah, kita harus menetapkan simbol pembatas baru – "_" :

 

scanner.useDelimiter("_")

 

Sekarang, kita dapat membaca data ini:

 

println(scanner.nextInt()) // 123
println(scanner.nextInt()) // 456

 

 

Periksa elemen selanjutnya

 

Misalkan kita memiliki data berikut di Scanner kita:

 

val scanner = Scanner("Hello, Kotlin!")

 

Sekarang, mencoba membaca beberapa kata:

 

val word1 = scanner.next()
val word2 = scanner.next()
val word3 = scanner.next()

 

Saat  mencoba membaca kata ketiga, akan menerima pengecualian dan program kami akan macet. Apa yang bisa kita lakukan dengan itu? Pemindai memiliki metodenya sendiri untuk situasi seperti itu – disebut hasNext() (hasNextInt(), dll).

 

if (scanner.hasNext()) val word1 = scanner.next() // Hello,
if (scanner.hasNext()) val word2 = scanner.next() // Kotlin!
if (scanner.hasNext()) val word3 = scanner.next() // It doesn't work but also doesn't make error

 

Sekarang, kita dapat membaca data atau tidak membacanya jika aliran data kita telah berakhir.

 

 

 

 

 

 

 

 

 

 

 

 

Next Post Previous Post
No Comment
Add Comment
comment url