Skip to content

Latest commit

 

History

History
308 lines (204 loc) · 7.21 KB

123.md

File metadata and controls

308 lines (204 loc) · 7.21 KB

Java Scanner

原文: https://www.programiz.com/java-programming/scanner

在本教程中,我们将借助示例学习 Java 扫描器及其方法。

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


示例 1:使用扫描器读取一行文本

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 name
        System.out.println("My name is " + name);

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

输出

Enter your name: Jack
My name is Jack 

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

Scanner input = new Scanner(System.in); 

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

System.in参数用于从标准输入中获取输入。 就像从键盘上获取输入一样。

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

现在您对Scanner有了一些了解,让我们对其进行更多的探索。


导入扫描器类

从上面的示例中可以看到,我们需要先导入java.util.Scanner包,然后才能使用Scanner类。

import java.util.Scanner; 

用 Java 创建扫描器对象

如上所述,导入包后,就可以创建Scanner对象。

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

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

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

在这里,我们创建了Scanner类的对象,这些对象将从 InputStream ,文件和字符串中分别读取输入。


Java 扫描器输入方法

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

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

示例 2:Java 扫描器nextInt()

import java.util.Scanner;

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

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

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

        // read 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 扫描器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 扫描器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 扫描器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 扫描器跳过nextLine()


Java 扫描器和BigIntegerBigDecimal

Java 扫描器还可以用于读取大整数和大十进制数。 要了解BigIntegerBigDecimal,请访问 Java BigInteger和 Java BigDecimal

  • nextBigInteger() - 从用户读取大整数值
  • nextBigDecimal() - 从用户读取大十进制值

示例 4:读取BigIntegerBigDecimal

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类读取整行并将该行分为令牌。 令牌是对 Java 编译器有意义的小元素。 例如,

假设有一个输入字符串:

He is 22 

在这种情况下,扫描器对象将读取整行并将字符串分成标记:Heis22 。 然后,对象遍历每个令牌,并使用其不同方法读取每个令牌。

注意:默认情况下,空格用于划分令牌。