Java中nextLine()和next()的區(qū)別
next()方法和nextLine()方法的區(qū)別在使用Scanner類實(shí)現(xiàn)字符窗口輸入時(shí),我們可以選擇使用next()方法或者nextLine()方法。那么這兩種方法究竟有什么區(qū)別呢?下面來(lái)進(jìn)行一些總
next()方法和nextLine()方法的區(qū)別
在使用Scanner類實(shí)現(xiàn)字符窗口輸入時(shí),我們可以選擇使用next()方法或者nextLine()方法。那么這兩種方法究竟有什么區(qū)別呢?下面來(lái)進(jìn)行一些總結(jié)。
next()方法的特點(diǎn)
首先,next()方法需要讀取到有效字符后才能結(jié)束輸入。對(duì)于輸入有效字符之前遇到的空格鍵、Tab鍵或Enter鍵等結(jié)束符,next()方法會(huì)自動(dòng)將其去掉。只有在輸入有效字符之后,next()方法才會(huì)將其后輸入的空格鍵、Tab鍵或Enter鍵等視為分隔符或結(jié)束符。簡(jiǎn)單地說(shuō),next()方法查找并返回從Scanner對(duì)象中獲取的下一個(gè)完整標(biāo)記。這個(gè)完整標(biāo)記的前后是與分隔模式匹配的輸入信息。因此,next()方法無(wú)法獲取帶有空格的字符串。
nextLine()方法的特點(diǎn)
相比之下,nextLine()方法的結(jié)束符只是Enter鍵。它會(huì)返回Enter鍵之前的所有字符作為一個(gè)字符串。由于nextLine()方法的結(jié)束符只是Enter鍵,它可以獲取帶有空格的字符串。
注意事項(xiàng)
鑒于以上兩種方法的區(qū)別,當(dāng)使用next()方法和nextLine()方法連續(xù)使用時(shí),需要注意下面的問(wèn)題。
舉個(gè)例子,假設(shè)我們有以下代碼:
```java
import ;
public class NextTest {
public static void main(String[] args) {
String s1, s2;
Scanner sc new Scanner();
("請(qǐng)輸入第一個(gè)字符串:");
s1 ();
("請(qǐng)輸入第二個(gè)字符串:");
s2 ();
("輸入的字符串是:" s1 " " s2);
}
}
```
如果我們運(yùn)行以上代碼,輸入"home"和"work",則輸出結(jié)果為:"輸入的字符串是:home work"。
但是,如果將代碼中的`s1 ();`和`s2 ();`這兩行交換位置,則會(huì)出現(xiàn)問(wèn)題。運(yùn)行結(jié)果僅顯示"請(qǐng)輸入第一個(gè)字符串:home",并沒(méi)有給s2從鍵盤輸入值。
經(jīng)過(guò)驗(yàn)證,其他的next相關(guān)方法(如nextDouble()、nextFloat()、nextInt()等)與nextLine()連用時(shí)都存在這個(gè)問(wèn)題。解決辦法是在每一個(gè)next()方法之后加上一個(gè)nextLine()方法,將被next()方法去掉的Enter結(jié)束符過(guò)濾掉。
下面是修改過(guò)的代碼示例:
```java
import ;
public class NextTest {
public static void main(String[] args) {
String s1, s2;
Scanner sc new Scanner();
("請(qǐng)輸入第一個(gè)字符串:");
s1 ();
(); // 過(guò)濾掉被next()方法去掉的Enter結(jié)束符
("請(qǐng)輸入第二個(gè)字符串:");
s2 ();
("輸入的字符串是:" s1 " " s2);
}
}
```
運(yùn)行以上修改后的代碼,輸入"home"和"work",則輸出結(jié)果為:"輸入的字符串是:home work"。