java中hasNextInt()不能正确判断含有空格的数据

使用hasNextInt()方法,当输入的一行数据中存在空格时,就不能正确判断是不是整数

例如:
我输入{123423as} 它会输出 123423as是整数
我输入{saas 123} 它会输出 saas 123是字符串
但是我输入{ 1243 as } 它会输出 1243 as 是整数

public class A{
    
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        String c1;
        System.out.println("请输入你的值:");
        while(sc.hasNextLine()) {//判断当前是否有输入,有输入则执行循环
            if(sc.hasNextInt()) {        //判断输入的是否是int型数据        
                c1 = sc.nextLine();
                System.out.println("这是整数"+c1);
                System.out.println("继续请输入你的值:");
                continue;
            }else {
                c1 = sc.nextLine();
                System.out.println("这是字符串"+c1);
                System.out.println("继续请输入你的值:");
                continue;
            }
        }
    }
}

运行结果

请输入你的值:
1234s
这是字符串1234s
继续请输入你的值:
123  as
这是整数123  as
继续请输入你的值:
asd123
这是字符串asd123
继续请输入你的值:
asdq    123
这是字符串asdq    123
继续请输入你的值:
是因为空格导致不能正常判断吗?,源码也看不懂,可以指导一下吗,谢谢

可能是因为使用hasNext()来判断字符串是否为数字不是很恰当的原因,因为hasNext()是判断输入里面是有一个整数可以读取,如果先输入数字,然后输入空格,然后一个字符串,那么hasNext()就判断到输入前面有一个数字可以读取而返回true, 他不是判断整个一行输入是否完全为数字。
判断是否为数字可以使用Integer.parseInt()方法来操作,用一个try-catch括起来,如果出现异常说明输入的一行字符串不是完全是数字,如果正确执行完,则是数字,代码如下:
参考链接:
《Scanner的hasNext、hasNextInt用法》_weixin_41262453的博客-CSDN博客_hasnext和hasnextint


import java.util.Scanner;

public class A {

     public static void main(String args[]) {
            Scanner sc = new Scanner(System.in);
            String c1;
            System.out.println("请输入你的值(输入bye退出):");
            c1 = sc.nextLine();
            while(!"bye".equals(c1)) {//判断当前是否有输入,有输入则执行循环
                 int i ;
                 try {
                        
                    i= Integer.parseInt(c1);
                   // System.out.println(1);
                 }catch ( NumberFormatException e) {
                     //System.out.println(e.toString());
                     System.out.println("这是字符串:"+c1);
                     System.out.println("请输入你的值(输入bye退出):");
                     c1 = sc.nextLine();
                     continue;
                 }
                
                System.out.println("这是整数:"+i); 
                System.out.println("请输入你的值:");
                c1 = sc.nextLine();
                 
//                if(sc.hasNextInt()) {        //判断输入的是否是int型数据        
//                    c1 = sc.nextLine();
//                    System.out.println("这是整数"+c1);
//                    System.out.println("继续请输入你的值:");
//                    continue;
//                }else {
//                    c1 = sc.nextLine();
//                    System.out.println("这是字符串"+c1);
//                    System.out.println("继续请输入你的值:");
//                    continue;
//                }
            }
        }

}

img

Scanner默认输入时以空格结束输入