跳到主要内容

Java Scanner 类

提示
  1. Scanner 类概述:Java的Scanner类,属于java.util包,用于从不同的源(例如输入流、文件或用户输入)读取数据。
  2. 创建和使用Scanner对象:在Java中,使用Scanner类前需导入java.util.Scanner包。创建Scanner对象时,可指定来源如输入流、文件或字符串。常用方法包括nextLine()nextInt()nextDouble()等,用于读取不同类型的输入。
  3. Scanner类的功能和限制Scanner类提供了读取各种数据类型的方法,如nextBigInteger()nextBigDecimal()。它根据空白字符分割输入文本成令牌,并允许对这些令牌进行读取。

java.util 包中的 Scanner 类用于从不同来源(如输入流、用户、文件等)读取输入数据。举个例子。

示例 1:使用 Scanner 读取一行文本

import java.util.Scanner;

class Main {
public static void main(String[] args) {

// 创建 Scanner 对象
Scanner input = new Scanner(System.in);

System.out.print("请输入你的名字: ");

// 从键盘接收输入
String name = input.nextLine();

// 输出名字
System.out.println("我的名字是 " + name);

// 关闭 scanner
input.close();
}
}

输出

请输入你的名字: Kelvin
我的名字是 Kelvin

在上面的例子中,注意以下行

Scanner input = new Scanner(System.in);

这里,我们创建了一个名为 inputScanner 对象。

System.in 参数用于从标准输入中接收输入。它的工作方式就像从键盘获取输入一样。

然后我们使用 Scanner 类的 nextLine() 方法从用户处读取一行文本。

现在您对 Scanner 有了一些了解,让我们更深入地探索它。

导入 Scanner 类

从上面的例子中我们可以看到,在使用 Scanner 类之前,我们需要导入 java.util.Scanner 包。

import java.util.Scanner;

在 Java 中创建 Scanner 对象

一旦我们导入了包,下面是我们如何创建 Scanner 对象的方式。

// 从输入流读取输入
Scanner sc1 = new Scanner(InputStream input);

// 从文件读取输入
Scanner sc2 = new Scanner(File file);

// 从字符串读取输入
Scanner sc3 = new Scanner(String str);

这里,我们创建了 Scanner 类的对象,分别用于从 InputStreamFile,和 String 中读取输入。

Java Scanner 方法来获取输入

Scanner 类提供了各种方法,允许我们读取不同类型的输入。

方法描述
nextInt()从用户处读取一个 int
nextFloat()从用户处读取一个 float
nextBoolean()从用户处读取一个 boolean
nextLine()从用户处读取一行文本
next()从用户处读取一个单词
nextByte()从用户处读取一个 byte
nextDouble()从用户处读取一个 double
nextShort()从用户处读取一个 short
nextLong()从用户处读取一个 long

示例 2:Java Scanner nextInt()

import java.util.Scanner;

class Main {
public static void main(String[] args) {

// 创建一个 Scanner 对象
Scanner input = new Scanner(System.in);

System.out.println("输入一个整数: ");

// 读取一个 int 值
int data1 = input.nextInt();

System.out.println("使用 nextInt(): " + data1);

input.close();
}
}

输出

输入一个整数:
22
使用 nextInt(): 22

在上面的例子中,我们使用了 nextInt() 方法来读取一个整数值。

示例 3:Java Scanner nextDouble()

import java.util.Scanner;

class Main {
public static void main(String[] args) {

// 创建 Scanner 对象
Scanner input = new Scanner(System.in);
System.out.print("输入 Double 值: ");

// 读取 double 值
double value = input.nextDouble();
System.out.println("使用 nextDouble(): " + value);

input.close();
}
}

输出

输入 Double: 33.33
使用 nextDouble(): 33.33

在上面的例子中,我们使用了 nextDouble() 方法来读取一个浮点值。

示例 4:Java Scanner next()

import java.util.Scanner;

class Main {
public static void main(String[] args) {

// 创建 Scanner 对象
Scanner input = new Scanner(System.in);
System.out.print("请输入你的名字: ");

// 读取整个单词
String value = input.next();
System.out.println("使用 next(): " + value);

input.close();
}
}

输出

请输入你的名字: Jonny Walker
使用 next(): Jonny

在上面的示例中,我们使用了 next() 方法从用户那里读取一个字符串。

这里,我们提供了完整的名字。然而,next() 方法只读取了名字的第一部分。

这是因为 next() 方法读取输入直到遇到空白字符。一旦遇到空白字符,它就返回字符串(不包括空白字符)。

示例 5:Java Scanner nextLine()

import java.util.Scanner;

class Main {
public static void main(String[] args) {

// 创建 Scanner 对象
Scanner input = new Scanner(System.in);
System.out.print("请输入你的名字: ");

// 读取整行
String value = input.nextLine();
System.out.println("使用 nextLine(): " + value);

input.close();
}
}

输出

请输入你的名字: Jonny Walker
使用 nextLine(): Jonny Walker

在第一个示例中,我们使用了 nextLine() 方法从用户那里读取一个字符串。

next() 不同,nextLine() 方法读取整行输入,包括空格。当遇到下一个换行符 \n 时,该方法结束。

推荐阅读: Java Scanner 跳过 nextLine()

Java Scanner 读取 BigInteger 和 BigDecimal

Java scanner 还可以用于读取大整数和大小数。

  • nextBigInteger() - 从用户处读取大整数值
  • nextBigDecimal() - 从用户处读取大小数值

示例 4:读取 BigInteger 和 BigDecimal

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;

class Main {
public static void main(String[] args) {

// 创建 Scanner 对象
Scanner input = new Scanner(System.in);
System.out.print("输入一个大整数: ");

// 读取大整数
BigInteger value1 = input.nextBigInteger();
System.out.println("使用 nextBigInteger(): " + value1);

System.out.print("输入一个大小数: ");

// 读取大小数
BigDecimal value2 = input.nextBigDecimal();
System.out.println("使用 nextBigDecimal(): " + value2);

input.close();
}
}

输出

输入一个大整数: 987654321
使用 nextBigInteger(): 987654321
输入一个大小数: 9.55555
使用 nextBigDecimal(): 9.55555

在上面的示例中,我们使用了 java.math.BigIntegerjava.math.BigDecimal 包分别读取 BigIntegerBigDecimal

Java Scanner 的工作原理

Scanner 类读取整行并将行分成令牌。令牌是对 Java 编译器有意义的小元素。例如,

假设有一个输入字符串:

他今年 22

在这种情况下,scanner 对象会读取整行并将字符串分成令牌:“”,“今年” 和 “22”。对象接着遍历每个令牌,使用其不同的方法读取每个令牌。

注意:默认情况下,使用空白字符来分隔令牌。