WEB开发网
开发学院WEB开发Jsp Java Scanner类中的next方法和nextLine方法连用时... 阅读

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

 2009-12-08 21:06:37 来源:WEB开发网   
核心提示:这里讨论的是关于java scanner类中的next方法和nextLine方法, 什么是next()和nextLine()方法? 问题出现: 先看以下代码: 一个简单的控制台输入和输出: view plaincopy to clipboardPRint?package cn.nileader.app.vi; im
这里讨论的是关于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”的影响了。



Tags:Java Scanner next

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接