0.next和nextLine是Scanner类中的两个方法。

 

1.next方法只接收有效字符。在遇到有效字符之前,输入的空格键,Enter键和Tab键等键,next方法都会忽略掉它们。遇到有效字符后,则遇到这些键退出。

例:

import java.util.*;
public class ITest1
{
  public static void main(String[] args) 
  {
    Scanner in=new Scanner(System.in);
    String text1=in.next();
    String text2=in.next();
    System.out.println("*"+text1+"*"+text2+"*");
  }
}

输入:Tab键AB空格键空格键CD空格键Enter键

输出:*AB*CD*

 

2.nextLine方法的结束符只是Enter键,即nextLine方法返回的是在输入Enter键之前的所有内容。

例:  

import java.util.*;
public class ITest2
{
	  public static void main(String[] args) 
	  {
		    Scanner in=new Scanner(System.in);
		    String text=in.nextLine();
		    System.out.println("*"+text+"*");
	  }
}

输入:AB空格键CDEnter键

输出:*AB CD*

 

3.next和nextLine方法连用

例:

import java.util.*;
public class ITest3
{
  public static void main(String[] args) 
  {    Scanner in=new Scanner(System.in);
    String text1=in.nextLine();
    String text2=in.next();
    System.out.println(text1);
    System.out.println(text2); 
  }
}

输入:Tom and JerryEnter键cartoonEnter键

输出:Tom and Jery

   cartoon

但是如果交换next和nextLine的顺序

例:

import java.util.*;
public class ITest4
{
  public static void main(String[] args) 
  {
    Scanner in=new Scanner(System.in);
    System.out.println("Enter first word");
    String text1=in.next();
    System.out.println("Enter second word");
    String text2=in.nextLine();
    System.out.println(text1+"*"+text2);
  }}

 

输入1:

Enter first word

my name isEnter键

输出1:

Enter second word

my* name is

 

输入2:

Enter first word

myEnter键

输出2:

Enter second word

my*

为什么会出现这种错误呢?

 前面说过,next在读取到了有效字符(my)之后,自然地将后面出现的Enter键视为结束符。但是后面的nextLine方法读取了有效字符my之后的所有字符包括Enter键(即nextLine把输入给next的Enter键当作了它自己的结束符)。因此,在输入1中,nextLine读取了 name isEnter键;在输入2中,nextLine读取了Enter键。所以Text2无法从键盘上获得输入值。

不仅是next方法,nextInt、nextDouble等方法与nextLine方法连用时都会产生这种问题。但nextLine和nextLine连用时不会出现这种问题。

解决方法:

可以在next方法后再加入一个nextLine方法,让它读取掉输入给next的Enter键,这样下一个nextLine就可以从键盘上得到输入的内容。

import java.util.*;
public class ITest4
{public static void main(String[] args) 
  {    Scanner in=new Scanner(System.in);
    System.out.println("Enter first word");
    String text1=in.next();
    in.nextLine();
    System.out.println("Enter second word");
    String text2=in.nextLine();
    System.out.println(text1+"*"+text2);  }
}

输入:

Enter first word

My name isEnter键

Enter second word

age is 30.Enter键

输出:My*age is 30.