Java Scanner类介绍

目录

一、导入Scanner类

二、创建Scanner对象

1. 从控制台读取输入:

2. 从文件读取输入:

3. 从字符串读取输入:

三、读取不同类型的数据

四、检查输入是否可用

五、两种常用的字符串输入方法

1. next()方法

2. nextLine()方法

六、注意事项


Java中的Scanner类是java.util包中的一个实用工具类,用于从不同的输入源读取数据,并将这些数据转换为Java中的基本类型或字符串。

一、导入Scanner类

要使用Scanner类,首先需要导入java.util.Scanner包,这是Java中所有类使用外部类时的常规做法。

import java.util.Scanner;

二、创建Scanner对象

创建Scanner对象时,需要指定输入源。常见的输入源包括标准输入流System.in(通常用于从键盘读取数据)、文件输入流(用于从文件读取数据)以及字符串输入流(用于从字符串读取数据)。

1. 从控制台读取输入:

Scanner scanner = new Scanner(System.in);

2. 从文件读取输入:

Scanner scanner = new Scanner(new File("filename.txt"));

3. 从字符串读取输入:

 String input = "Hello World";
 Scanner scanner = new Scanner(input);

三、读取不同类型的数据

Scanner 类提供了多种方法来读取不同类型的数据,包括整数、浮点数、布尔值和字符串等。

以下是一些常用的方法:

  • 读取整数

int i = scanner.nextInt();
  • 读取浮点数

float f = scanner.nextFloat();
  • 读取双精度浮点数

double d = scanner.nextDouble();
  • 读取布尔值

boolean b = scanner.nextBoolean();
  • 读取字符串

String s = scanner.next(); // 读取一个单词
String line = scanner.nextLine(); // 读取一行文本

四、检查输入是否可用

在读取数据之前,可以使用 hasNextXXX() 方法来检查输入是否可用,这些方法返回一个布尔值,表示是否存在下一个指定类型的输入。

  • 检查是否有下一个整数

   if (scanner.hasNextInt()) {
       int i = scanner.nextInt();
   }
  • 检查是否有下一个浮点数

   if (scanner.hasNextFloat()) {
       float f = scanner.nextFloat();
   }
  • 检查是否有下一个双精度浮点数

   if (scanner.hasNextDouble()) {
       double d = scanner.nextDouble();
   }
  • 检查是否有下一个布尔值

   if (scanner.hasNextBoolean()) {
       boolean b = scanner.nextBoolean();
   }
  • 检查是否有下一个字符串

   if (scanner.hasNext()) {
       String s = scanner.next();
   }
  • 检查是否有下一行文本

   if (scanner.hasNextLine()) {
       String line = scanner.nextLine();
   }

五、两种常用的字符串输入方法

1. next()方法

next() 方法用于读取下一个完整的标记(token),默认情况下,标记是由空白字符(空格、制表符、换行符等)分隔的字符串。next()方法会自动去除输入前的空白字符,并且在读取到有效字符后,将后续的空白字符视为分隔符或结束符。

 import java.util.Scanner;
 ​
 public class Demo {
     public static void main(String[] args) {
         //创建一个键盘对象,用于接收键盘数据
         Scanner sc = new Scanner(System.in);
 ​
         System.out.print("请输入字符串:");
         //输入:hello world
         String s = sc.next();
 ​
         System.out.println("输入的字符串是:" + s);
         //输出:hello
     }
 }

在本例子中,next()方法在读取字符串时,遇到空格后停止读取,因此s的值为"hello"

2. nextLine()方法

nextLine() 方法用于读取输入中的下一行文本。它返回一个字符串,该字符串包含从当前位置到行尾的所有字符,可以包含空白字符,但不包括行尾的换行符。

 import java.util.Scanner;
 ​
 public class Demo {
     public static void main(String[] args) {
         //创建一个键盘对象,用于接收键盘数据
         Scanner sc = new Scanner(System.in);
 ​
         System.out.print("请输入字符串:");
         //输入:hello world
         String s = sc.nextLine();
 ​
         System.out.println("输入的字符串是:" + s);
         //输出:hello world
     }
 }

在本例子中,nextLine()方法读取了整行输入,包括空格,因此s的值为"hello world"

六、注意事项

  • 关闭 Scanner 对象:在使用完 Scanner 对象后,应该调用 close() 方法来关闭它,以释放资源。然而,对于从System.in读取数据的Scanner对象,通常在程序结束前不需要手动关闭它,因为System.in是由JVM管理的,并且会在程序退出时自动关闭。但是,为了养成良好的编程习惯,建议在不再需要Scanner对象时调用close()方法。

  • 分隔符Scanner类使用了一个分隔符(delimiter)来划分不同的数据项。默认情况下,Scanner 使用空白字符(如空格、制表符和换行符)作为分隔符,也可以使用useDelimiter()方法来自定义分隔符。

  • 换行符问题:在使用next()nextLine()方法时,需要注意换行符的处理。next()方法不会消耗换行符,而nextLine()会读取直到换行符。因此,在连续调用这两个方法时,可能需要调用一个额外的nextLine()来消耗掉next()留下的换行符。

  • 使用hasNextXXX()方法:在尝试读取特定类型的输入之前,可以使用hasNextInt()hasNextDouble()等方法来检查输入流中是否还有下一个匹配类型的输入,这可以避免在输入不匹配时抛出异常。

  • 异常处理:当输入的数据类型与预期不匹配时,Scanner的某些方法(如nextInt())会抛出InputMismatchException异常。因此,建议使用try-catch块来捕获并处理这些异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值