Java Scanner 类

java.util包中的Scanner类用于从输入流、文件等不同来源读取输入数据。让我们看一个例子。


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

import java.util.Scanner;

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

    // creates an object of Scanner
    Scanner input = new Scanner(System.in);

    System.out.print("Enter your name: ");

    // takes input from the keyboard
    String name = input.nextLine();

    // prints the name
    System.out.println("My name is " + name);

    // closes the scanner
    input.close();
  }
}

输出

Enter your name: Kelvin
My name is Kelvin

在上面的示例中,请注意这一行

Scanner input = new Scanner(System.in);

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

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

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

现在您对Scanner有了一些了解,让我们进一步探索它。


导入 Scanner 类

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

import java.util.Scanner;

要了解有关导入包的更多信息,请访问Java 包


在 Java 中创建 Scanner 对象

导入包后,这是创建Scanner对象的方式。

// read input from the input stream
Scanner sc1 = new Scanner(InputStream input);

// read input from files
Scanner sc2 = new Scanner(File file);

// read input from a string
Scanner sc3 = new Scanner(String str);

在这里,我们创建了Scanner类的对象,它们将分别从InputStreamFileString读取输入。


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) {

    // creates a Scanner object
    Scanner input = new Scanner(System.in);

    System.out.println("Enter an integer: ");

    // reads an int value
    int data1 = input.nextInt();

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

    input.close();
  }
}

输出

Enter an integer:
22
Using nextInt(): 22

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


示例 3:Java Scanner nextDouble()

import java.util.Scanner;

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

    // creates an object of Scanner
    Scanner input = new Scanner(System.in);
    System.out.print("Enter Double value: ");

    // reads the double value
    double value = input.nextDouble();
    System.out.println("Using nextDouble(): " + value);

    input.close();
  }
}

输出

Enter Double value: 33.33
Using nextDouble(): 33.33

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


示例 4:Java Scanner next()

import java.util.Scanner;

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

    // creates an object of Scanner
    Scanner input = new Scanner(System.in);
    System.out.print("Enter your name: ");

    // reads the entire word
    String value = input.next();
    System.out.println("Using next(): " + value);

    input.close();
  }
}

输出

Enter your name: Jonny Walker
Using next(): Jonny

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

在这里,我们提供了全名。但是,next()方法只读取名字。

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


示例 5:Java Scanner nextLine()

import java.util.Scanner;

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

    // creates an object of Scanner
    Scanner input = new Scanner(System.in);
    System.out.print("Enter your name: ");

    // reads the entire line
    String value = input.nextLine();
    System.out.println("Using nextLine(): " + value);

    input.close();
  }
}

输出

Enter your name: Jonny Walker
Using 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) {

    // creates an object of Scanner
    Scanner input = new Scanner(System.in);
    System.out.print("Enter a big integer: ");

    // reads the big integer
    BigInteger value1 = input.nextBigInteger();
    System.out.println("Using nextBigInteger(): " + value1);

    System.out.print("Enter a big decimal: ");

    // reads the big decimal
    BigDecimal value2 = input.nextBigDecimal();
    System.out.println("Using nextBigDecimal(): " + value2);

    input.close();
  }
}

输出

Enter a big integer: 987654321
Using nextBigInteger(): 987654321
Enter a big decimal: 9.55555
Using nextBigDecimal(): 9.55555

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


Java Scanner 的工作原理

Scanner类读取整行并将其划分为标记。标记是具有对 Java 编译器有意义的小元素。例如,

假设有一个输入字符串

He is 22

在这种情况下,scanner 对象将读取整行并将字符串划分为标记:“He”、“is”和“22”。然后,该对象遍历每个标记并使用其不同的方法读取每个标记。

注意:默认情况下,空格用于分隔标记。


另请阅读:

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战