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