7.1.5.4 标准输入

原文链接: https://kotlinlang.org/docs/standard-input.html

7.1.5.4 标准输入

注意: Java Scanner 是一个较慢的工具。只有在你需要它提供的特定功能时才使用它。否则,通常更推荐使用 Kotlin 的 readln() 函数来读取标准输入。

为了从标准输入读取数据,Java 提供了 Scanner 类。Kotlin 提供了两种主要的从标准输入读取的方式:与 Java 类似的 Scanner 类,以及 readln() 函数。

使用 Java Scanner 从标准输入读取

在 Java 中,标准输入通常通过 System.in 对象访问。你需要导入 Scanner 类、创建一个对象,并使用 .nextLine()、.nextInt() 这类方法读取不同的数据类型:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Java 实现
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取一行输入。例如:Hi there!
        System.out.print("Enter a line: ");
        String line = scanner.nextLine();
        System.out.println("You entered: " + line);
        // You entered: Hi there!

        // 读取一个整数。例如:08081990
        System.out.print("Enter an integer: ");
        int number = scanner.nextInt();
        System.out.println("You entered: " + number);
        // You entered: 08081990

        scanner.close();
    }
}

在 Kotlin 中使用 Java Scanner

由于 Kotlin 与 Java 库的互操作性,你可以开箱即用地在 Kotlin 代码中访问 Java Scanner。

要在 Kotlin 中使用 Java Scanner,你需要导入 Scanner 类,并通过传入代表标准输入流、决定数据读取方式的 System.in 对象来初始化它。你可以使用可用的读取方法来读取字符串之外的值,例如 .nextLine()、.next() 和 .nextInt():

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 导入 Java Scanner
import java.util.Scanner

fun main() {
    // 初始化 Scanner
    val scanner = Scanner(System.`in`)

    // 读取一整行字符串。例如:"Hello, Kotlin"
    val line = scanner.nextLine()
    print(line)
    // Hello, Kotlin

    // 读取一个字符串。例如:"Hello"
    val string = scanner.next()
    print(string)
    // Hello

    // 读取一个数字。例如:123
    val num = scanner.nextInt()
    print(num)
    // 123
}

使用 Java Scanner 读取输入时其他有用的方法还有 .hasNext()、.useDelimiter() 和 .close():

  • .hasNext() 方法检查输入中是否还有更多可用数据。如果还有剩余元素可以迭代,它返回布尔值 true;如果输入中没有更多元素,则返回 false。

  • .useDelimiter() 方法设置读取输入元素时使用的分隔符。分隔符默认是空白字符,但你也可以指定其他字符。例如,.useDelimiter(",") 会读取以逗号分隔的输入元素。

  • .close() 方法关闭与 Scanner 关联的输入流,阻止后续再使用该 Scanner 读取输入。

注意: 使用完 Java Scanner 后一定要调用 .close() 方法。关闭 Java Scanner 会释放它占用的资源,并确保程序行为正确。

使用 readln() 从标准输入读取

在 Kotlin 中,除了 Java Scanner 之外,你还有 readln() 函数。它是最直接的读取输入方式。该函数从标准输入读取一行文本并作为字符串返回:

1
2
3
4
5
6
7
8
// 读取一个字符串。例如:Charlotte
val name = readln()

// 读取一个字符串并把它转换为整数。例如:43
val age = readln().toInt()

println("Hello, $name! You are $age years old.")
// Hello, Charlotte! You are 43 years old.

更多信息请参阅读取标准输入。