Java Scanner中一起使用next()和nextLine()方法会出现什么情况?

时间:2022-10-10 18:15:24

 Java中,我们可以通过 Scanner 类来获取用户的输入。先来看看next()方法的使用:

  

Java Scanner中一起使用next()和nextLine()方法会出现什么情况?

package WorkStudy;
import sun.rmi.runtime.Log;
import java.util.Scanner;
public class ScannerTest {

public static void main(String[] args) {

/* Scanner类中next的用法 */ //System.out.println("程序顶端输入验证: "); Scanner s = new Scanner(System.in); //从键盘接收数据
//next方式接收字符串 System.out.println("next方式接收: ");
//判断是否还有输入 if (s.hasNext()){
String str = s.next(); System.out.println("next()的值为: " + str); }

输入

123

返回

next()的值为: 123

如果我们输入 123 456 hello world呢?

返回

123

这时候我们知道,使用next()方法时,输入中如果有空格、tab键等,next()只会获取空格前的有效字符,同时也会trim掉输入内容前的空格。不信我们试试

输入

       123 3456 5555

返回

123


下面看下nextLine()的用法,还是使用同样的代码,只是需要修改下s.netLine()

package WorkStudy;
import sun.rmi.runtime.Log;
import java.util.Scanner;
public class ScannerTest {

public static void main(String[] args) {

System.out.println("为nextLine()准备的值: ");
String str2 = s.nextLine(); System.out.println("nextLine()的值为: " + str2);
s.close();
}

}

这次我们没有hasNext方法来判断是否有输入,直接上值

输入123

返回123

输入123 456 hello world

返回

123 456 hello world

说明nextLine()方法,只要有输入值,无论输入的是什么(只要不是回车键),都会显示出来

那该方法会不会trim掉输入字符前的空格呢?我们来试试

输入    123 456 trim hello

返回     123 456 trim hello

说明会显示


那么如果这两个方法用在一起会怎么样呢?

package WorkStudy;
import sun.rmi.runtime.Log;
import java.util.Scanner;
public class ScannerTest {

public static void main(String[] args) {

/* Scanner类中next的用法 */ //System.out.println("程序顶端输入验证: "); Scanner s = new Scanner(System.in); //从键盘接收数据
//next方式接收字符串 System.out.println("next方式接收: ");
//判断是否还有输入 if (s.hasNext()){
String str = s.next(); System.out.println("next()的值为: " + str); }


/* Scanner类中nextLine的方法 */ System.out.println("为nextLine()准备的值: "); String str2 = s.nextLine(); System.out.println("nextLine()的值为: " + str2);
s.close();
}

}

输入123

返回

next方式接收:
123
next()的值为: 123
为nextLine()准备的值:
nextLine()的值为:

然后发现后面的nextLine()值不能输入了,但是如果我输入 123 456 hello world 会返回什么呢?

返回

   456 hello world

为什么会这样呢?


原来是把回车符留在了缓冲区,下一次读取会碰到读取空字符串的情况

如果要避免这种情况,怎么办呢?

就是增加一句

String str3 = s.nextLine();

说明下面的nextLine()要读取再一次输入的值了,那么整体的程序为:

package WorkStudy;
import sun.rmi.runtime.Log;
import java.util.Scanner;
public class ScannerTest {

public static void main(String[] args) {

/* Scanner类中next的用法 */ //System.out.println("程序顶端输入验证: "); Scanner s = new Scanner(System.in); //从键盘接收数据
//next方式接收字符串 System.out.println("next方式接收: ");
//判断是否还有输入 if (s.hasNext()){
String str = s.next(); System.out.println("next()的值为: " + str); }


/* Scanner类中nextLine的方法 */ System.out.println("为nextLine()准备的值: "); String str3 = s.nextLine(); String str2 = s.nextLine(); System.out.println("nextLine()的值为: " + str2);
s.close();
}

}

返回为: 

next方式接收:
123 456 789
next()的值为: 123
为nextLine()准备的值:
123 456 789
nextLine()的值为: 123 456 789


不过我们也发现,之前输入123 456 789,增加了一句之后,第一次输入的值都会清除掉


java不简单呀,一个类中一个方法就有很多规则,很多都是在使用中才发现的。