Java中nextLine()和next()的区别
next()方法和nextLine()方法的区别在使用Scanner类实现字符窗口输入时,我们可以选择使用next()方法或者nextLine()方法。那么这两种方法究竟有什么区别呢?下面来进行一些总
next()方法和nextLine()方法的区别
在使用Scanner类实现字符窗口输入时,我们可以选择使用next()方法或者nextLine()方法。那么这两种方法究竟有什么区别呢?下面来进行一些总结。
next()方法的特点
首先,next()方法需要读取到有效字符后才能结束输入。对于输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉。只有在输入有效字符之后,next()方法才会将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。简单地说,next()方法查找并返回从Scanner对象中获取的下一个完整标记。这个完整标记的前后是与分隔模式匹配的输入信息。因此,next()方法无法获取带有空格的字符串。
nextLine()方法的特点
相比之下,nextLine()方法的结束符只是Enter键。它会返回Enter键之前的所有字符作为一个字符串。由于nextLine()方法的结束符只是Enter键,它可以获取带有空格的字符串。
注意事项
鉴于以上两种方法的区别,当使用next()方法和nextLine()方法连续使用时,需要注意下面的问题。
举个例子,假设我们有以下代码:
```java
import ;
public class NextTest {
public static void main(String[] args) {
String s1, s2;
Scanner sc new Scanner();
("请输入第一个字符串:");
s1 ();
("请输入第二个字符串:");
s2 ();
("输入的字符串是:" s1 " " s2);
}
}
```
如果我们运行以上代码,输入"home"和"work",则输出结果为:"输入的字符串是:home work"。
但是,如果将代码中的`s1 ();`和`s2 ();`这两行交换位置,则会出现问题。运行结果仅显示"请输入第一个字符串:home",并没有给s2从键盘输入值。
经过验证,其他的next相关方法(如nextDouble()、nextFloat()、nextInt()等)与nextLine()连用时都存在这个问题。解决办法是在每一个next()方法之后加上一个nextLine()方法,将被next()方法去掉的Enter结束符过滤掉。
下面是修改过的代码示例:
```java
import ;
public class NextTest {
public static void main(String[] args) {
String s1, s2;
Scanner sc new Scanner();
("请输入第一个字符串:");
s1 ();
(); // 过滤掉被next()方法去掉的Enter结束符
("请输入第二个字符串:");
s2 ();
("输入的字符串是:" s1 " " s2);
}
}
```
运行以上修改后的代码,输入"home"和"work",则输出结果为:"输入的字符串是:home work"。