• Scanner类 next与nextLine方法的使用问题


    关于nextLine()和next()的使用
    关键在于:next() 方法遇见第一个有效字符(非空格,换行符)时,开始扫描,当遇见第一个分隔符或结束符(空格或换行符)时,结束扫描。、
    这时使用nextLine(),继续读,有可能读入第一个字符是空格或换行符。
     
        在实现字符窗口的输入时,我个人更喜欢选择使用扫描器Scanner,它操作起来比较简单。
    在写作业的过程中,我发现用Scanner实现字符串的输入有两种方法,一种是next(),一种
    是nextLine(),但是这两种方法 究竟有什么区别呢?
        我查了一些资料总结如下:
        next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab、
    或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法
    才将其后的输入的空格键、Tab或Enter键等视为分隔符或结束符。简单地说,next()查找并返回
    来自此扫描器的下一下完整标记。完整标记的前后是与分隔模式的输入信息,所以next方法不能得到
    带空格的字符串。
        而nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是
    可以得到带空格的字符串的。
     
    例子一:
        鉴于以上两种方法的区别,同学样一定要注意next()方法 与nextLine()方法 的连用,举例如下:
        package com.tarena.corejava;
     
    import java.util.Scanner;
    public class TestScanner2 {
    public static void main(String[] args) {
    String s1,s2;
    Scanner  sc = new Scanner(System.in);
    System.out.println("请输入第一个字符串:");
    //s1 = sc.nextLine();
    s1=sc.next();
    System.out.println("请输入第二个字符:");
    //s2 = sc.next();
    s2=sc.nextLine();
    System.out.println("输入的字符串是:"+s1+" "+s2);
    }
    }
    可以看到,nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法给s2键盘验证,我发现
    其它的next的方法 ,如dobul nextDouble(),float next Float(),int nextInt()等与nextLine()连用时都存在
    这个问题,解决办法是:在第一个next(),nextDouble(),nextFloat(),nextInt()等语句后加一个nextLine()语句,
    将next()去掉的Enter结束符过滤掉,例如上面的程序改写为:
    public static void main(String[] args) {
    String s1,s2;
    Scanner  sc = new Scanner(System.in);
    System.out.println("请输入第一个字符串:");
    //s1 = sc.nextLine();
    s1=sc.next();
    sc.nextLine();
    System.out.println("请输入第二个字符:");
    //s2 = sc.next();
    s2=sc.nextLine();
    System.out.println("输入的字符串是:"+s1+" "+s2);
    }
    就可以了。
     
    例子二:
    package com.tarena.corejava;
     
    import java.util.Scanner;
    public class TestScanner {
    public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.println("test next:输入字符串:");
    String s2 = scan.next();
    System.out.println("得到的字符串是:"+s2);
    System.out.println("test nextLine:输入字符串:");
    String s3 = scan.nextLine();
    System.out.println("得到的字符串是:"+s3+"长度是:"+s3.length());
    }
    }
     

     当next () 与 nextLine() 一起使用时要注意:

    next() 在 nextLine 之前使用时,next 扫描空格或换行之前的字符,并没有读入" " , 而nextLine 则要从" " 开始读入,所以得不到数据、

    正确方法:

    1. int n = cin.nextInt();
    2. while(str = cin.nextLine().equles(""))
    3. {
    4. }  
    原文地址:http://blog.sina.com.cn/s/blog_81547cad01018mnd.html
  • 相关阅读:
    SQL SERVER2017 安装程序无法与下载服务器联系。无法安装机器学习服务的问题解决方式
    Kali Linux无法访问网络的问题
    Vue的冒泡事件
    记录阿里云ECS(Centos7.4)安装mysql 8.0.X服务
    沧桑巨变中焕发青春活力-记极1s HC5661A 打怪升级之路
    Asp.Net MVC过滤器小试牛刀
    C# Windows Service调用IBM Lotus Notes发送邮件
    记录一些js框架用途
    vc14(vs2015) 编译php7 记录
    C++ API方式连接mysql数据库实现增删改查
  • 原文地址:https://www.cnblogs.com/Ly426/p/4770483.html
Copyright © 2020-2023  润新知