코틀린 독학 13 Java Scanner를 사용한 표준 입력

Table of Contents

코틀린 독학 13번째 Java Scanner를 사용한 표준 입력

readln()때로는 표준 입력에서 데이터를 읽는 데 사용하기에 충분하지 않은 경우도 있습니다 . 예를 들어 데이터 흐름에서만 찾 거나 한 단어씩 순차적으로 데이터를 읽고 이러한 읽기를 단계별로 제어하는 ​​등의 readln()복잡한 작업에는 적합하지 않습니다 . 이 주제에서는 Kotlin에서도 사용할 수 있는 Java 도구 중 하나인 .IntegersDoublesScanner

자바 스캐너란 무엇입니까?

스캐너는 표준 입력에서 데이터를 얻는 또 다른 방법입니다. 다른 Java 라이브러리와 상호 운용이 가능하므로 Kotlin에서 직접 액세스할 수 있습니다. Scanner프로그램이 표준 입력에서 다양한 유형 (문자열, 숫자 등)의 값을 읽을 수 있도록 합니다.

이를 사용하려면 소스 코드가 포함된 파일 상단에 다음 import 문을 추가해야 합니다.

import java.util.Scanner

또는

import java.util.*

Scanner두 가지 방법 중 하나를 사용하여 프로그램에 추가할 수 있습니다 . 가져오기에 대해서는 나중에 자세히 다루겠습니다.

다음으로 초기화되는 변수를 만들어 보겠습니다 Scanner.

val scanner = Scanner(System.`in`)

이 줄에는 표준 입력 스트림을System.`in` 나타내는 객체가 있습니다 . 이를 내부 데이터 소스로 래핑하고 이를 사용하여 작업할 수 있는 편리한 방법 세트를 제공합니다. 물론 변수를 만드는 대신 코드에서 사용할 수 있지만 단일 변수를 사용하는 것이 더 편리하고 읽기 쉬운 방법입니다.scannerScanner(System.`in`)scanner

이제 표준 입력에서 데이터를 읽을 수 있습니다.

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()한 줄도 읽지 않고 한 단어 만 읽습니다 . 사용자가 를 입력하면 Hello, Kotlin로 읽혀집니다 Hello,.

전화를 걸 scanner.nextLine()거나 scanner.nextInt()비슷한 것을 하면 프로그램은 입력 데이터를 예상합니다. 다음은 올바른 입력 데이터의 예입니다.

Hello, Kotlin
123 Hello

아래 입력 예도 유효합니다.

Hello, Kotlin
123
Hello

scanner.next()또는 숫자가 scanner.nextLine()새 줄에 있는 경우를 사용하여 숫자를 문자열로 읽을 수 있습니다 .

또한 이 Scanner유형은 다른 유형의 값을 읽기 위한 여러 메서드(함수)를 제공합니다. 자세한 내용은 클래스 스캐너 문서를 참조하세요 .

아래 프로그램은 두 개의 숫자를 읽고 이를 두 개의 다른 라인에 역순으로 출력합니다.

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

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

    val num1 = scanner.nextInt() // reads the first number
    val num2 = scanner.nextInt() // reads the second number

    println(num2) // prints the second number
    println(num1) // prints the first number
}

좋아, 이제 데이터를 읽었으므로 Scanner더 이상 필요하지 않습니다. 를 사용했을 때 readln()우리는 코드를 진행하고 더 멀리 나아갔습니다. 그러나 ScannerPC 자원을 항상 소모할 수 있습니다. close()이를 중지하려면 취소하는 메소드를 사용해야 합니다 Scanner. 🙂

scanner.close()

이제 우리는 좋습니다.

맞춤 구분 기호

한 가지 중요한 점은 .NET 파일에 데이터를 직접 입력할 수 있다는 것입니다 Scanner. 보자:

val scanner = Scanner("123_456")

하지만 공백이나 새 줄이 없으면 어떻게 다음 단어를 읽을 수 있습니까? 이러한 경우 Scanner편리한 도구가 있습니다 — useDelimiter(). 도움을 받으면 , 등의 메서드에 대한 구분 기호를 사용자 정의할 수 있습니다 next()nextInt()구분 기호의 기본값은 공백입니다.

이러한 단어와 정수를 별도로 읽으려면 새로운 구분 기호를 설정해야 합니다 "_".

scanner.useDelimiter("_")

이제 다음 데이터를 읽을 수 있습니다.

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

시원한!

다음 요소 확인

스캐너에 다음과 같은 데이터가 있다고 가정합니다.

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

이제 우리는 여러 단어를 읽으려고 노력합니다.

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

세 번째 단어를 읽으려고 하면 예외가 발생하고 프로그램이 중단됩니다. 그걸로 우리는 무엇을 할 수 있나요? 허, Scanner이런 상황에 대한 나름의 방법이 있습니다. 이를 hasNext()hasNextInt(), 등)이라고 합니다.

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

이제 데이터 흐름이 종료되면 데이터를 읽을 수도 있고 읽지 않을 수도 있습니다.

결론

이 주제에서는 표준 입력을 읽는 두 번째 방법인 Java에 대해 논의했습니다 Scanner. 복잡한 데이터를 읽고 내용을 필터링하는 편리한 방법입니다. 기억해야 할 사항은 다음과 같습니다.

  1. Scanner필요하지 않은 경우 항상 를 사용하십시오 readln().
  2. 다양한 유형의 데이터를 읽기 위해 Scanner에는 next()nextInt()및 와 같은 메서드가 있습니다 nextLine().
  3. 이상한 구분 기호가 포함된 입력이 있는 경우 메소드를 사용하십시오 useDelimiter().
  4. 입력에 포함된 단어 수를 모르는 경우 메소드를 사용하십시오 hasNext().

코틀린 독학 13

이제 코드의 흐름이 어느정도 익숙해진것을 느낄 수 있습니다. 대충 이런 코드 다음에는 이런 코드가 와야한다 같은것을 알 수 있어용. 그리고 이 코드ㅡ 

20240117 220436 2

20240117 220436 3

20240117 220436 4

20240117 220436 5

20240117 220436 6

20240117 220436 7

20240117 220436 8

외웁시다! val scanner = Scanner(Systeem. ` in `)

20240117 220436 9

20240117 220436 10

20240117 220436 11
20240117 220938 1

조금 투박하게 하면 위의 코드대로 하고 solution에는 아래과 같은 코드로 나와있습니다.

20240117 220436 12

while 문을 썼는데요, hasNextInt()는 scanner가 정수를 가져올 수 있는지 여부를 확인하여 ‘true’또는 ‘false’값을 반환합니다. 그다음 println을 사용하여 출력하도록 했습니다.