Jave之Scanner和不合法输入处理

Java Scanner 类

java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。

1.使用前需要导入Scanner工具包:

import java.util.Scanner;

2. 创建 Scanner 对象的基本语法:

Scanner input = new Scanner(System.in);

//创建了一个叫input的Scanner对象
注:
import是输入的意思。

util,utiliy的缩写,意即,工具性的包。主要包含集合类(如ArrayList,HashMap等),随机数产生类,属性文件读取类,定时器类等类。

Scanner,扫描仪,使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。
next方法:
1)next() :读取不全带空格的字符串(<过滤前面遇到的空格等非有效字符>,直到读取有效字符后结束读取)
2)nextLine() : 可以完全读取带空格的字符串
(以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符)
3)nextInt() :读取int型数字
4)nextFloat() :读取float型数字
5)nextLong() :读取long 型数字
6)nextDouble() :读取double型数字

读取之前都最好使用**hasNext+首字母大写的类型名()**来进行验证读取之前输入是否合法(这种方法比下面谈到的try catch更好理解~)
例如:(注意main函数括号中应该写成String [] args,阿里巴巴java开发手册中提的这点,[]是String 数组的一部分,之前我写的不规范,现在更正了,截图更新了)

import java.util.Scanner;
    
    public class ScannerTest {
    	public static void main(String[] args) {
    		Scanner input = new Scanner(System.in);
    		System.out.println("next方式:");
    		 if(input.hasNext()) { 
    			 String s1 = input.next() ;
    		 System.out.println("input string is " + s1);
    		 }
    		 input.close();
    	}
    }

在这里插入图片描述
在这里插入图片描述

import java.util.Scanner;
    
    public class ScannerTest {
    	public static void main(String[] args) {
    		System.out.println("nextInt方式:");
    		boolean falseInput = true;
    		while(falseInput) {
    			Scanner input = new Scanner(System.in);
    			if (!input.hasNextInt()) {
    				System.out.println("input is not An integer number");
    				continue;
    			}
    			else {
    				int s2 = input.nextInt();
    				System.out.println("input integer num is " + s2);
    				falseInput = false;
    			}	
    			input.close();
    		}
    	}
    }

上面代码的测试:

在这里插入图片描述在这里插入图片描述
*3.如果使用时出现提示:**Resource leak :‘scanner’ is never closed,*需要加上Scannner对象名.close();(一般都是成对使用,放在同一个方法(如果存在循环要放在同一个循环里)<函数>里面)

 import java.util.Scanner; 
      public class ScannerTest {
        	public static void main(String[] args) {
        		 Scanner scanner = new Scanner(System.in);
        		 System.out.print("请输入一个数:");
        		 int a = scanner.nextInt();
        		 System.out.printf("%d的平方是%d\n", a, a * a);
        		 scanner.close();		
        	}
        }


**

try catch捕获不合法输入

**
结构示例:

try {
    	d = input.nextInt();
     }catch(Exception e) {
        System.out.println("输入有误!");
      /*如果捕获到异常输入(就此而言输入的不是int整数)*/
        continue;}/*直到没有捕获到异常*/

//

 import java.util.Scanner;
          
        public class ScannerTest {
        	public static void main(String[] args) {
        		int d = 0;
        		boolean falseInput = true;
        		while(falseInput){
        			System.out.println("请输入一个整数:");
        			Scanner input = new Scanner(System.in);
        			try {
        				d = input.nextInt();
        			}catch(Exception e) {
        			System.out.println("输入有误!");/*如果捕获到异常输入(就此而言输入的不是int整数)*/
        			continue;
        			}/*直到没有捕获到异常*/
        			falseInput = false;
        		}
        		System.out.println("input num is : "+d);
        	}
        }

测试:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:
如果Scanner input = new Scanner(System.in);放在了while之前,一旦输入异常将陷于死循环.

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Leo Bliss

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

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

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

打赏作者

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

抵扣说明:

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

余额充值