【Java学习笔记】Scanner类的使用

1.Scanner类概述

JDK5以后用于获取用户的键盘输入

2.Scanner类的构造方法

  • public Scanner(InputStream source):构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。

具体用法可以参考下面的代码:

package com.hw.scanner;

import java.util.Scanner;

/**
 * Scanner类概述
 * JDK5以后用于获取用户的键盘输入
 * 
 * Scanner类的构造方法
 * public Scanner(InputStream source):构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。
 * 
 * System类下有一个静态的字段
 * 		public static final InputStream in;标准的输入流,对应着键盘录入。
 * 		InputStream input = System.in;
 * 
 * @author HW
 * 
 */
public class ScannerDemo {
	public static void main(String[] args) {
		// 创建Scanner对象
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入一个整数:");
		int x = sc.nextInt();
		System.out.println("x=" + x);
	}
}

运行结果如下: 

请输入一个整数:10
x=10

 3.Scanner类常用成员方法

基本格式如下:

  • public boolean hasNextXxx():判断是否是某种类型的元素,其中Xxx可以是int,double等。如果需要判断是否包含下一个字符串,则可以省略Xxx
  • public Xxx nextXxx():获取该元素

以int类型为例:

  • public boolean hasNextInt():判断是否存在int类型的元素
  • public int nextInt():获取一个int类型的值 
  • public String nextLine():获取一个String类型的值

hasNextInt()的具体用法参考以下代码: 

package com.hw.scanner;

import java.util.Scanner;

/**
 * @author HW
 *
 */
public class ScannerDemo2 {
	public static void main(String[] args) {
		// 创建Scanner对象
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入一个整数:");

		if (sc.hasNextInt()) {
			int x = sc.nextInt();
			System.out.println("你输入的整数为:" + x);
		} else {
			System.out.println("你输入的数据不是整数!");
		}
	}
}

运行结果如下:

请输入一个整数:10
你输入的整数为:10

下面来看一个需求:先获取int类型的值,再获取String类型的值,代码如下:

/**
 * 先获取int类型的值,再获取String类型的值
 */
private static void method4() {
	// 创建Scanner对象
	Scanner sc = new Scanner(System.in);

	// 先获取int类型的值,再获取String类型的值
	System.out.print("请输入一个整数:");
	int x = sc.nextInt();

	System.out.print("请输入一个字符串:");
	String str = sc.nextLine();

	System.out.println("x=" + x + " str=" + str);
	}

会出现问题,如下:

请输入一个整数:10
请输入一个字符串:x=10 str=

主要原因:换行符号的问题

解决方法:

  • 第一种方式:先获取一个数值,然后再创建一个新的键盘录入对象获取字符串。
  • 第二种方式:把所有的数据都先按照字符串获取,然后要什么,就对应的转换为什么。

代码如下:

package com.hw.scanner;

import java.util.Scanner;

/**
 * Scanner类的常用方法 
 * public int nextInt():获取一个int类型的值 
 * public String nextLine():获取一个String类型的值
 * 
 * @author HW
 * 
 */
public class ScannerDemo3 {
	public static void main(String[] args) {
		// method1();
		// method2();
		// method3();
		method4();
	}

	/**
	 * 先获取int类型的值,再获取String类型的值
	 * 
	 * 会出现问题,如下:
	 * 请输入一个整数:10
	 * 请输入一个字符串:
	 * x=10 str=
	 * 
	 * 主要原因:换行符号的问题
	 * 
	 * 解决方法:
	 * A:先获取一个数值后,在创建一个新的键盘录入对象获取字符串。
	 * B:把所有的数据都先按照字符串获取,然后要什么,你就对应的转换为什么。
	 */
	private static void method4() {
		// 创建Scanner对象
		Scanner sc = new Scanner(System.in);

		// 先获取int类型的值,再获取String类型的值
		System.out.print("请输入一个整数:");
		int x = sc.nextInt();

		System.out.print("请输入一个字符串:");
		// String str = sc.nextLine();
		
		// 解决方法:A:先获取一个数值后,在创建一个新的键盘录入对象获取字符串。
		Scanner sc1 = new Scanner(System.in);
		String str = sc1.nextLine();

		System.out.println("x=" + x + " str=" + str);
	}

	/**
	 * 先获取String类型的值,再获取int类型的值
	 */
	private static void method3() {
		// 创建Scanner对象
		Scanner sc = new Scanner(System.in);

		// 先获取String类型的值,再获取int类型的值
		System.out.print("请输入一个字符串:");
		String str = sc.nextLine();

		System.out.print("请输入一个整数:");
		int x = sc.nextInt();

		System.out.println("str=" + str + " x=" + x);

		System.out.println("========================");
	}
	
	/**
	 * 获取两个String类型的值
	 */
	private static void method2() {
		// 创建Scanner对象
		Scanner sc = new Scanner(System.in);

		// 获取两个String类型的值
		System.out.print("请输入第一个字符串:");
		String str = sc.nextLine();

		System.out.print("请输入第二个字符串:");
		String str1 = sc.nextLine();
		System.out.println("str=" + str + " str1=" + str1);
	}

	/**
	 * 获取两个int类型的值
	 */
	private static void method1() {
		// 创建Scanner对象
		Scanner sc = new Scanner(System.in);

		// 获取两个int类型的值
		System.out.print("请输入第一个整数:");
		int a = sc.nextInt();

		System.out.print("请输入第二个整数:");
		int b = sc.nextInt();
		System.out.println("a=" + a + " b=" + b);
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_44679832/article/details/105578495