首页 > 学院 > 开发设计 > 正文

Java Scanner类中的next方法和nextLine方法连用时要注意的地方

2019-11-17 03:59:22
字体:
来源:转载
供稿:网友
这里讨论的是关于java scanner类中的next方法和nextLine方法。     什么是next()和nextLine()方法?

   问题出现:

   先看以下代码:   一个简单的控制台输入和输出:

   view plaincopy to clipboardPRint?
package cn.nileader.app.vi;   
import java.util.Scanner;   
public class Test {   
    public static void main(String[] args) throws Exception{   
        Scanner cin = new Scanner(System.in);   
        String  ni = cin.nextLine();   
            System.out.print("用Scanner类的next()方法接收了你刚刚输入的字符串是:"+ni+"  长度是"+ni.length());   
        ni = cin.nextLine();   
        System.out.print("用Scanner类的next()方法接收了你刚刚输入的字符串是:"+ni+"  长度是"+ni.length());   
    }   
}  
package cn.nileader.app.vi;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws Exception{
Scanner cin = new Scanner(System.in);
        String  ni = cin.nextLine();
System.out.print("用Scanner类的next()方法接收了你刚刚输入的字符串是:"+ni+"  长度是"+ni.length());
    ni = cin.nextLine();
    System.out.print("用Scanner类的next()方法接收了你刚刚输入的字符串是:"+ni+"  长度是"+ni.length());
}
}


   再看下面的代码:

   view plaincopy to clipboardprint?
package cn.nileader.app.vi;   
import java.util.Scanner;   
public class Test {   
    public static void main(String[] args) throws Exception{   
        Scanner cin = new Scanner(System.in);   
        String  ni = cin.next();   
            System.out.print("用Scanner类的next()方法接收了你刚刚输入的字符串是:"+ni+"  长度是"+ni.length());   
        ni = cin.next();   
        System.out.print("用Scanner类的next()方法接收了你刚刚输入的字符串是:"+ni+"  长度是"+ni.length());   
    }   
}  
package cn.nileader.app.vi;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws Exception{
Scanner cin = new Scanner(System.in);
        String  ni = cin.next();
System.out.print("用Scanner类的next()方法接收了你刚刚输入的字符串是:"+ni+"  长度是"+ni.length());
    ni = cin.next();
    System.out.print("用Scanner类的next()方法接收了你刚刚输入的字符串是:"+ni+"  长度是"+ni.length());
}
}

   以上段代码都是正确、无聊的。

      精彩的来了……

    运行下面的代码:

    view plaincopy to clipboardprint?
package cn.nileader.app.vi;   
import java.util.Scanner;   
public class Test {   
    public static void main(String[] args) throws Exception{   
        Scanner cin = new Scanner(System.in);   
        String  ni = cin.next();   
            System.out.println("用Scanner类的next()方法接收了你刚刚输入的字符串是:"+ni+"  长度是"+ni.length());   
        ni = cin.nextLine();   
        System.out.print("用Scanner类的next()方法接收了你刚刚输入的字符串是:"+ni+"  长度是"+ni.length());   
    }   
}   
package cn.nileader.app.vi;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws Exception{
Scanner cin = new Scanner(System.in);
        String  ni = cin.next();
System.out.println("用Scanner类的next()方法接收了你刚刚输入的字符串是:"+ni+"  长度是"+ni.length());
    ni = cin.nextLine();
    System.out.print("用Scanner类的next()方法接收了你刚刚输入的字符串是:"+ni+"  长度是"+ni.length());
}
}  

    运行结果如下:

    ni掌柜
    用Scanner类的next()方法接收了你刚刚输入的字符串是:ni掌柜  长度是4
    用Scanner类的next()方法接收了你刚刚输入的字符串是:  长度是0

    完蛋了,当 Java Scanner的next和nextLine方法连用时,


    你根本没有机会输入第二个字符串了!!!

    问题解析:

       next方法和nextLine方法的表象区别是前者读取的是“一段”字符,而后者读取的是一行字符串。

       出现以上现象的原因简单的说主要是由next()方法的不负责造成的。

       next()方法的工作原理:( 肤浅的说)

       从一行中扫描,直到碰到特定的标识符:空格或是换行符(/n),获取其前的字符(串)。

        看这里,第一个next()方法读入了“ni掌柜”,但并没有读入"/n",也不负责换行,然后就把 "/n"丢给了nextLine()处理,

        你也知道的,nextLine()属于那种“见钱眼开”,看见“/n”就收了,然后扫描了 /n 之前的内容,也就是空字符串。于是出现问题了。

        问题解决:

         view plaincopy to clipboardprint?
package cn.nileader.app.vi;   
import java.util.Scanner;   
public class Test {   
    public static void main(String[] args) throws Exception{   
        Scanner cin = new Scanner(System.in);   
        String  ni = cin.next();   
            System.out.println("用Scanner类的next()方法接收了你刚刚输入的字符串是:"+ni+"  长度是"+ni.length());   
        while(  (ni = cin.nextLine()).equals("") ){}   
        System.out.print("用Scanner类的next()方法接收了你刚刚输入的字符串是:"+ni+"  长度是"+ni.length());   
    }   
}   
package cn.nileader.app.vi;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws Exception{
Scanner cin = new Scanner(System.in);
        String  ni = cin.next();
System.out.println("用Scanner类的next()方法接收了你刚刚输入的字符串是:"+ni+"  长度是"+ni.length());
    while(  (ni = cin.nextLine()).equals("") ){}
    System.out.print("用Scanner类的next()方法接收了你刚刚输入的字符串是:"+ni+"  长度是"+ni.length());
}
}  

         运行结果:

        ni掌柜
        用Scanner类的next()方法接收了你刚刚输入的字符串是:ni掌柜  长度是4
        是个天才
        用Scanner类的next()方法接收了你刚刚输入的字符串是:是个天才  长度是4

        把原来的第二个cin.nextLine()

        改成 while(  (ni = cin.nextLine()).equals("") ){}

        这样就可以、除掉上一行的“/n”的影响了。




发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表