Scanner 类的介绍和使用

120 阅读3分钟

1、简介

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

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

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

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

next() 方法:

读取的字符串不包含分隔符,如果输入中存在多个以空格分隔的单词,next() 方法只会返回第一个单词。
在读取之前会忽略输入中的前导空格。
     

nextLine() 方法:

 从输入源中读取并返回一整行字符串,包括换行符 \n 在内。
 它会读取输入源中的全部内容直到遇到换行符,或者输入结束。
 nextLine() 方法返回的字符串可以包含空格和其他特殊字符。

2、使用举例:

从不同的输入源读取数据:

从标准输入流读取数据

Scanner sc = new Scanner(System.in);
System.out.print("请输入一个整数:");
int number = sc.nextInt(); // 从标准输入流读取整数
System.out.println("你输入的整数是:" + number);
sc.close();            

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

从文件读取数据

wenjian{            
        Scanner sc= new Scanner(new File("input.txt"));// 创建对象sc,文件作为输入源
         while (sc.hasNextLine()) {
            String line = sc.nextLine(); // 从文件读取一行数据
            System.out.println(line);
         }
        sc.close();
      } catch (FileNotFoundException e) {
        e.printStackTrace();
      }          

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

从字符串读取数据

Scanner sc = new Scanner(input);//创建 Scanner 对象sc,使用字符串作为输入源
while (sc.hasNext()) {
        if (sc.hasNextInt()) {
            int number = sc.nextInt(); // 从字符串读取整数
            System.out.println("整数:" + number);
        } else {
            String word = sc.next(); // 从字符串读取单词
            System.out.println("单词:" + word);
        }
}
sc.close();

创建了一个 Scanner 对象sc,并将字符串 “niehao 02” 作为输入源。然后使用 hasNext()hasNextInt() 和 next() 方法循环读取字符串中的每个单词或整数,并打印出来。