问题所在:

Java中Scanner类中nextLine()方法与next()或nextInt()联用时可能出现一个常见的错误,那就是当next()或者nextInt(),nextDouble() 、 nextFloat()用在nextLine的前面时。nextLine会把前者的结束符“换行符”作为字符串读入,进而不需要从键盘输入字符串nextLine已经转向下一条语句执行

[java] view plain copy print?Scanner的next,nextint和nextLine的使用总结_JAVAScanner的next,nextint和nextLine的使用总结_Scanner_02

  1. public class Test {  

  2.    

  3.      public static void main(String[] args) {  

  4.          Scanner in =  new Scanner(System.in);  

  5.          System.out.println("请输入一个整数");  

  6.        while(in.hasNextInt()){  

  7.             int num = in.nextInt();  

  8.             System.out.println("请输入一个字符串");  

  9.             String str = in.nextLine();  

  10.             System.out.println("num="+num+",str="+str);  

  11.             System.out.println("请输入一个整数");  

  12.         }  

  13.     }  

  14. }  

[java] view plain copy print?Scanner的next,nextint和nextLine的使用总结_JAVAScanner的next,nextint和nextLine的使用总结_Scanner_02

  1. 行结果为:  

  2.   

  3.      请输入一个整数  

  4.      1231  

  5.      请输入一个字符串  

  6.      num=1231,str=  

  7.      请输入一个整数  

  8.   

  9.      第二个String类型的参数没有读取进来。  

改用了next()方法


[java] view plain copy print?Scanner的next,nextint和nextLine的使用总结_JAVAScanner的next,nextint和nextLine的使用总结_Scanner_02

  1. public class Test {  

  2.     

  3.       public static void main(String[] args) {  

  4.           Scanner in =  new Scanner(System.in);  

  5.           System.out.println("请输入一个整数");  

  6.         while(in.hasNextInt()){  

  7.              int num = in.nextInt();  

  8.              System.out.println("请输入一个字符串");  

  9.              String str = in.next();  

  10.              System.out.println("num="+num+",str="+str);  

  11.              System.out.println("请输入一个整数");  

  12.          }  

  13.      }  

  14.  }  

[java] view plain copy print?Scanner的next,nextint和nextLine的使用总结_JAVAScanner的next,nextint和nextLine的使用总结_Scanner_02

  1. 请输入一个整数  

  2.        213 jdskals  

  3.        请输入一个字符串  

  4.        num=213,str=jdskals  

  5.        请输入一个整数  


原因:


next()以忽略空格,Tab,Enter键开始,以空格,Tab,Enter键作为结束符结束


next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键,换行符或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。简单地说,next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next方法不能得到带空格的字符串。
nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的

修正方法:在next()或nextInt()方法使用Enter键之后,填充一个无用的nextLine()