xiaogaotongxue__ 2022-07-01 11:12 采纳率: 73.3%
浏览 41
已结题

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
继续请输入你的值:
是因为空格导致不能正常判断吗?,源码也看不懂,可以指导一下吗,谢谢
  • 写回答

2条回答 默认 最新

  • a5156520 2022-07-01 11:45
    关注

    可能是因为使用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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月9日
  • 已采纳回答 7月1日
  • 修改了问题 7月1日
  • 创建了问题 7月1日

悬赏问题

  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持