我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java 基础——Scanner 类

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java 基础——Scanner 类

目录

(1)Scanner 类是 Java 中一个用于读取用户输入的工具类。它可以从多种输入源读取数据,例如标准输入流、文件或字符串。Scanner 类提供了一系列方法来处理不同数据类型的输入,比如整数、浮点数、布尔值、字符和字符串等。

(2)Scanner 类中有两种比较重要的方法:

  • hasNext 开头的方法:用于检查输入源中是否还有下一个标记可用,常用的有:
    • hasNext():如果输入源中还有下一个标记(非空格字符),返回 true。
    • hasNextLine():如果输入源中还有下一行(非空行),返回 true。
    • hasNextInt():如果输入源中还有下一个整数,返回 true。
    • hasNextDouble():如果输入源中还有下一个浮点数,返回 true。
    • hasNextBoolean():如果输入源中还有下一个布尔值,返回 true。
  • next 开头的方法:用于从输入源中获取下一个标记并返回相应的数据类型,常用的有:
    • next():从输入源中获取并返回一个字符串,默认以空格为分隔符,以回车 Enter 为结束符,回车 Enter 后的内容则放入缓冲区。
    • nextLine():从输入源中获取并返回一行字符串(以换行符为分隔符)。
    • nextInt():从输入源中获取并返回一个整数。
    • nextDouble():从输入源中获取并返回一个浮点数。
    • nextBoolean():从输入源中获取并返回一个布尔值(“true” 或 “false”)。

(3)next()nextLine() 在处理方式和使用场景方面有一些区别:

  • next() 方法:
    • 读取的字符串不包含分隔符,如果输入中存在多个以空格分隔的单词,next() 方法只会返回第一个单词
    • 在读取之前会忽略输入中的前导空格
  • nextLine() 方法:
    • 从输入源中读取并返回一整行字符串,包括换行符 \n 在内。
    • 它会读取输入源中的全部内容直到遇到换行符,或者输入结束。
    • nextLine() 方法返回的字符串可以包含空格和其他特殊字符。

2.1.从不同的输入源读取数据

当使用 Scanner 类时,可以从不同的输入源读取数据,包括标准输入流、文件和字符串等。下面是几个使用不同输入源的示例:

(1)从标准输入流读取数据

public class Example {    public static void main(String[] args) {        // 创建 Scanner 对象,使用标准输入流作为输入源        Scanner scanner = new Scanner(System.in);        System.out.print("请输入一个整数:");        int number = scanner.nextInt(); // 从标准输入流读取整数        System.out.println("你输入的整数是:" + number);        scanner.close();    }}

在这个示例中,我们创建了一个 Scanner 对象,并将标准输入流(System.in)作为输入源。然后我们使用 nextInt() 方法从标准输入流读取一个整数。

(2)从文件读取数据

public class Example {    public static void main(String[] args) {        try {            // 创建 Scanner 对象,使用文件作为输入源            Scanner scanner = new Scanner(new File("input.txt"));            while (scanner.hasNextLine()) {                String line = scanner.nextLine(); // 从文件读取一行数据                System.out.println(line);            }            scanner.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        }    }}

在这个示例中,我们创建了一个 Scanner 对象,并将文件 “input.txt” 作为输入源。然后我们使用 hasNextLine()nextLine() 方法循环读取文件的每一行数据并打印出来。

(3)从字符串读取数据

public class Example {    public static void main(String[] args) {        String input = "Hello World 123";        // 创建 Scanner 对象,使用字符串作为输入源        Scanner scanner = new Scanner(input);        while (scanner.hasNext()) {            if (scanner.hasNextInt()) {                int number = scanner.nextInt(); // 从字符串读取整数                System.out.println("整数:" + number);            } else {                String word = scanner.next(); // 从字符串读取单词                System.out.println("单词:" + word);            }        }        scanner.close();    }}

在这个示例中,我们创建了一个 Scanner 对象,并将字符串 “Hello World 123” 作为输入源。然后我们使用 hasNext()hasNextInt()next() 方法循环读取字符串中的每个单词或整数,并打印出来。

2.2.next() 和 nextLine() 的区别

class Solution {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        // next() && nextLine()        System.out.println("请输入一个字符串 nextLine():");        String str1 = scanner.nextLine();        System.out.println(str1);        System.out.println("请输入一个字符串 next():");        String str2 = scanner.next();        System.out.println(str2);    }}

结果如下:

请输入一个字符串 nextLine():   Hello World  nextLine() 的读取结果为:    Hello World  请输入一个字符串 next():   Hello   Worldnext() 的读取结果为: Hello

2.3.读取大小已知的一维数组

描述:第一行输入是以一个整数 n,表示数组 nums 的长度,第 2 行输入 n 个整数,整数之间用空格分隔。请将这些整数保存到数组 nums 中,然后将其打印出来。例如:

74 9 0 -1 6 8 9

(1)使用 nextInt() 逐个读取:

class Solution {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        //数组的长度        int n = scanner.nextInt();        int[] nums = new int[n];        //数组中的 n 个数        for (int i = 0; i < n; i++) {            nums[i] = scanner.nextInt();        }        System.out.println("数组 nums 的元素为:");        for (int num : nums) {            System.out.print(num + " ");        }        scanner.close();    }}

结果如下:

74 9 0 -1 6 8 9数组 nums 的元素为:4 9 0 -1 6 8 9 

(2)使用 nextLine() 先全部读取,然后逐个解读:

class Solution {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int n = scanner.nextInt();        //清除缓冲区中的换行符        scanner.nextLine();        int[] nums = new int[n];        String input = scanner.nextLine();        //以一个或者多个空格为分隔符        String[] numStrings = input.split("\\s+");        for (int i = 0; i < n; i++) {            nums[i] = Integer.parseInt(numStrings[i]);        }        System.out.println("数组 nums 的元素为:");        for (int num : nums) {            System.out.print(num + " ");        }        scanner.close();    }}

注意事项:

  • 需要注意的是在使用 nextInt() 方法读取整数后,缓冲区仍然会包含一个换行符 \n。这是因为 nextInt() 只读取了整数部分,而没有读取换行符。当接下来调用 nextLine() 方法时,它会读取缓冲区中的剩余部分,即仅包含换行符的部分。因此,为了确保 nextLine() 方法可以读取到用户输入的整行字符串,我们需要在调用 nextLine() 方法之前清除缓冲区中的换行符。
  • 通过调用 scanner.nextLine() 但不将其结果保存到变量中,实际上是表示我们只想要从缓冲区中读取并丢弃这个换行符。这样,接下来调用 nextLine() 方法时,它将读取到用户输入行的内容,并将其保存到字符串 input 中,而不会被之前的换行符干扰。确保清除缓冲区中的换行符是一种常见的做法,以避免由于换行符残留而导致不正确的输入或跳过输入的情况发生。
  • 如果在上面代码中没有 scanner.nextLine() 这行语句的话,那么会出现如下错误:
7Exception in thread "main" java.lang.NumberFormatException: For input string: ""at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)at java.lang.Integer.parseInt(Integer.java:592)at java.lang.Integer.parseInt(Integer.java:615)at Solution.main(Solution.java:15)

2.4.读取大小未知的一维数组

描述:输入若干个整数,整数之间用空格分隔。请将这些整数保存到数组 nums 中,然后将其打印出来。例如:

1 12 3 4 5 6 

(1)使用 nextInt() 逐个读取:

class Solution {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        List<Integer> nums = new ArrayList<>();        while (scanner.hasNextInt()) {            nums.add(scanner.nextInt());        }        System.out.println("数组 nums 的元素为:");        for (int num : nums) {            System.out.print(num + " ");        }        scanner.close();    }}

注意事项:

  • 如果在控制台手动输入若干个整数,期望手动停止输入后,程序结束读取整数,可以使用其他方式来指示结束输入的条件。一种常见的方式是通过输入特定的字符或字符串来表示结束;
  • 由于是逐个读取,因此事先不知道数组的长度,所以上面代码中使用 list 来存储;

(2)使用 nextLine() 先全部读取,然后逐个解读:

class Solution {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        String input = scanner.nextLine();        input = input.trim();        String[] numStrings = input.split("\\s+");        int[] nums = new int[numStrings.length];        for (int i = 0; i < numStrings.length; i++) {            nums[i] = Integer.parseInt(numStrings[i]);        }        System.out.println("数组 nums 的元素为:");        for (int num : nums) {            System.out.print(num + " ");        }        scanner.close();    }}

结果如下:

1 12 3 4 5 6 数组 nums 的元素为:1 12 3 4 5 6 

2.5.读取长度大小已知的二维数组

描述:第一行输入是以一个整数 m,表示二维数组 nums 的长度,后面跟随 m 行,每行都有 n 个整数,整数之间用空格分隔。例如:

31 8 7 32 3 4 54 5 6 7
class Solution {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        // 读取整数 m 作为二维数组的长度        int m = scanner.nextInt();        scanner.nextLine(); // 读取换行符        //创建二维数组 nums        int[][] nums = new int[m][];        //读取m行数据到二维数组 nums        for (int i = 0; i < m; i++) {            //读取整行数据            String line = scanner.nextLine();            //将每个整数分割保存到一维数组            String[] values = line.split("\\s+");            //创建长度为 n 的一维数组            int n = values.length;            nums[i] = new int[n];            //保存每个整数到一维数组            for (int j = 0; j < n; j++) {                nums[i][j] = Integer.parseInt(values[j]);            }        }        //打印二维数组 nums        System.out.println("数组 nums 的元素为:");        for (int i = 0; i < m; i++) {            for (int j = 0; j < nums[i].length; j++) {                System.out.print(nums[i][j] + " ");            }            System.out.println();        }    }}

结果如下:

31 8 7 32 3 4 54 5 6 7数组 nums 的元素为:1 8 7 3 2 3 4 5 4 5 6 7 

2.6.读取长度大小未知的二维锯齿数组

描述:输入若干行,每一行有若干个整数,整数之间用空格分隔,并且每一行的整数不一定相同。例如:

1 2 3 45 3 4 9 0 -1 2 1 4 6 4 6 7 8 7 
class Solution {    public static void main(String[] args) {    //也可选择使用字符串作为输入,方便测试        String input = "1 2 3 45\n" +                "3 4\n" +                "9 0 -1 2\n" +                "1 4 6\n" +                "4 6 7 8 7";                        Scanner scanner = new Scanner(System.in);        List<List<Integer>> nums = new ArrayList<>();        // 逐行读取数据并保存到二维数组锯齿 nums        while (scanner.hasNextLine()) {            String line = scanner.nextLine();            if (line.isEmpty()) {                break; // 输入结束            }            String[] values = line.split("\\s+");            List<Integer> row = new ArrayList<>();            for (String value : values) {                row.add(Integer.parseInt(value));            }            nums.add(row);        }        //打印二维锯齿数组 nums        for (List<Integer> row : nums) {            for (Integer value : row) {                System.out.print(value + " ");            }            System.out.println();        }    }}

结果如下:

1 2 3 453 49 0 -1 21 4 64 6 7 8 7数组 nums 的元素为:1 2 3 45 3 4 9 0 -1 2 1 4 6 4 6 7 8 7 

来源地址:https://blog.csdn.net/weixin_43004044/article/details/131867601

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java 基础——Scanner 类

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java Scanner类

Java Scanner类java.util.Scanner是Java5的新特征,我们可以通过 Scanner 类来获取用户的输入。右面是创建 Scanner 对象的基本语法:Scanner s = new Scanner(System.i
2023-06-02

java常用类——Scanner

什么是Scanner类一个可以解析基本类型和字符串的简单文本扫描器。 例如,以下代码使用户能够从 System.in 中读取一个数:Scanner sc = new Scanner(System.in); int i = sc.nextInt();备注:Sys
java常用类——Scanner
2016-10-01

java 类基础(转)

java 类基础(转)[@more@]类是Java 的核心和本质。它是Java 语言的基础,因为类定义了对象的本性。既然类是面向对象程序设计Java 语言的基础,因此,你想要在Java 程序中实现的每一个概念都必须封装在类以内。因为类是Ja
2023-06-03

java scanner类怎么使用

使用Scanner类可以从标准输入(键盘)或文件中读取数据。以下是使用Scanner类的基本步骤:1. 导入Scanner类:在代码文件的开头添加`import java.util.Scanner;`语句。2. 创建Scanner对象:使用
2023-09-14

怎么在java中使用scanner类

今天就跟大家聊聊有关怎么在java中使用scanner类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Scanner类,这是一个用于扫描输入文本的新的实用程序。由于任何数据都必须通过
2023-05-30

Java 的 Scanner 类是否能够读取文件?(Java的Scanner能读取文件吗)

在Java编程中,Scanner类是一个非常常用的工具,用于从各种输入源读取用户输入或其他数据。那么,Java的Scanner类能否读取文件呢?这是一个在Java开发中经常遇到的问题,下面我们将详细探讨这个问
Java 的 Scanner 类是否能够读取文件?(Java的Scanner能读取文件吗)
Java2024-12-17

Java基础09 类数据与类方法

我们一直是为了产生对象而定义类(class)的。对象是具有功能的实体,而类是对象的类型分类。这是面向对象的一个基本概念。在继承(inheritance)中,我们将类当做可以拓展的主体,这提高了我们对“类”的认识。类本身还有许多值得讨论的地方
2023-06-02

Java中Scanner类使用保姆级教程

JavaSE在java.util类库中提供了一个专门用于输入操作的类Scanner类,可以使用该类创建一个对象,然后利用该对象的相关方法从键盘上读取数据,下面这篇文章主要给大家介绍了关于Java中Scanner类使用的相关资料,需要的朋友可以参考下
2023-05-18

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录