一篇文章带你搞懂Java Scanner类—菜鸟教程学习

一篇文章带你搞懂Java Scanner类—菜鸟教程学习

Jdk5中引入java.util.Scanner ,我们可以通过 Scanner 类来获取用户的输入。

基本概念:

​ Scanner类是Java标准库提供的一个用于读取输入的类。它可以通过不同的方法从标准输入、文件和字符串等来源读取数据。

要使用Scanner类,需要先导入java.util包。然后,可以创建一个Scanner对象,并将输入源传递给它进行读取。

下面是创建 Scanner 对象的基本语法:
j

Scanner s = new Scanner(System.in);

我们主要学习的就是Scanner类的next()方法和nextLine()方法,

这俩中方法都是用来获取输入的字符串的,那么有什么限制呢?

让我们一起来看看吧

next()方法

一般在接受数据进行操作的时候呢,我们都会进行判断是否还有输入的数据,这里的话要使用hasNext作为判断是否还有输入?那么具体例子如下:

import java.util.Scanner; 
 
public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 从键盘接收数据
 
        // next方式接收字符串
        System.out.println("next方式接收:");
        // 判断是否还有输入
        if (scan.hasNext()) {
            String str1 = scan.next();
            System.out.println("输入的数据为:" + str1);
        }
        scan.close();
    }

执行以上程序输出结果为:

next方式接收:
Stevedash
输入的数据为:Stevedash

使用 nextLine 方法:

j

import java.util.Scanner;
 
public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 从键盘接收数据
 
        // nextLine方式接收字符串
        System.out.println("nextLine方式接收:");
        // 判断是否还有输入
        if (scan.hasNextLine()) {
            String str2 = scan.nextLine();
            System.out.println("输入的数据为:" + str2);
        }
        scan.close();
    }
}

执行以上程序输出结果为:

nextLine方式接收:
Stevedash
输入的数据为:Stevedash

next() 与 nextLine() 区别

next():
  • 1、一定要读取到有效字符后才可以结束输入。
  • 2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
  • 3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
  • next() 不能得到带有空格的字符串。
nextLine():
  • 1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
  • 2、可以获得空白。

如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取:


以下是其他使用Scanner类的一些常见操作示例:

从标准输入(键盘)读取整数:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // 创建Scanner对象,传入System.in作为输入源

        System.out.print("请输入一个整数: ");
        int num = scanner.nextInt(); // 使用nextInt()方法读取下一个整数

        System.out.println("你输入的整数是: " + num);
    }
}

从标准输入(键盘)读取字符串:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // 创建Scanner对象,传入System.in作为输入源

        System.out.print("请输入一个字符串: ");
        String str = scanner.nextLine(); // 使用nextLine()方法读取一行输入

        System.out.println("你输入的字符串是: " + str);
    }
}

从文件读取数据:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        try {
            File file = new File("data.txt"); // 创建File对象表示文件路径
            Scanner scanner = new Scanner(file); // 创建Scanner对象,传入文件作为输入源

            while (scanner.hasNextLine()) { // 使用hasNextLine()方法检查是否还有下一行
                String line = scanner.nextLine(); // 使用nextLine()方法读取一行数据
                System.out.println(line);
            }

            scanner.close(); // 关闭Scanner对象
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

从上面的例子我们可以得知:
Scanner类在Java中是一个非常实用的输入工具类,具有以下优势和应用场景:

优势:
方便易用:Scanner类提供了简单而直观的方法来读取基本类型和字符串等数据。
多样的输入源:Scanner可以从标准输入、文件和字符串等多种输入源中读取数据。
灵活的数据解析:Scanner类支持将输入数据按照指定的格式解析为不同的数据类型,如整数、浮点数等。
提供了方便的检查方法:Scanner类提供了多个hasNextXxx()方法,用于方便地检查是否还有下一个可读元素。

缺点:
性能较低:相比于其他高性能的输入流读取方法,如BufferedReader,Scanner的性能较低。这主要是因为Scanner会尝试根据特定格式解析数据,导致额外的开销。
异常处理复杂:在使用Scanner类时,需要考虑异常处理,如输入数据与期望的格式不匹配时可能抛出InputMismatchException异常。

应用场景:
用户交互输入:Scanner类适用于从用户输入中读取数据,例如命令行交互、控制台输入等。
读取文件内容:当需要从文本文件中读取数据时,Scanner类提供了方便的方法来逐行读取文件内容。
解析格式化数据:Scanner类可以根据指定的分隔符或正则表达式,将字符串按照特定的格式解析为不同的数据类型。

结尾语:记录于2023年7月31号21时00分,以上仅为个人在[菜鸟教程—JavaScanner类](Java Scanner 类 | 菜鸟教程 (runoob.com))的学习过程中遇到的问题,还有记录的个人想法,有错误欢迎指出,希望对您有帮助,感谢观看!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stevedash

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值