2016-01-28 199 views
2

我試圖進入Java,我決定跳入用戶輸入。這裏是我的代碼:帶空格的字符串

import java.util.Scanner; 

public class HelloWorld{ 

public static void main(String []args){ 
    System.out.println("Enter a phrase to mutate: \n"); 

    Scanner userinput = new Scanner(System.in); 
    String phrase = userinput.next(); 
    System.out.println(phrase); 

    String phrasemutation1 = phrase.toUpperCase(); 
    System.out.println(phrasemutation1); 

    String phrasemutation2 = phrasemutation1.replace('I','X'); 
    System.out.println(phrasemutation2); 

    //String phrasemutation3 = phrasemutation2.substring(17, 23); 
    //System.out.println(phrasemutation3); 
} 
} 

然而,在任何一個進入太空時,只有第一個字是採取搜索網站只是給我結果如何刪除它們,但我想繼續。空間完好無損。有沒有辦法做到這一點,或者至少用下劃線代替它們?

此外,如果有一些初學者格式化錯誤,我很樂意聽到他們。

+1

根據您運行的平臺(Windows,Linux,...),您可能不得不用雙引號或其他內容(可能是單引號)來包裝該短語。 – Thomas

+3

使用'nextLine'來讀取整行,而不是隻讀取一個單詞的'next'。您可以在[javadoc](https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html)中找到更多信息。 – assylias

回答

1

使用userinput.nextLine()可以獲得整個文本而不是單個字符串。

userinput.next()只會得到下一個字符串(由空格分隔的字符串)。

3
String phrase = userinput.next(); 

查找並返回來自此掃描器的下一個完整標記。完整的令牌前後有與分隔符模式匹配的輸入。即使先前調用hasNext()返回true,該方法也可能在等待輸入進行掃描時阻塞。 更改爲:

String phrase = userinput.nextLine(); 

此掃描器執行當前行,並返回跳過的輸入信息。此方法返回當前行的其餘部分,排除末尾的任何行分隔符。該位置設置爲下一行的開頭。 由於此方法繼續在輸入中搜索以查找行分隔符,因此如果沒有行分隔符存在,它可能會緩存搜索要跳過的行的所有輸入。

1

你試過

String phrase = userinput.nextLine(); 

nextLine()方法讀取的一切,包括空格,直到遇到一個換行符。

2

你會想要熟悉Javadoc。 Scanner明確指出:

掃描儀使用定界符模式將其輸入分爲標記,缺省情況下該定界符與空白匹配。

所以每個next給你是由空格分開的字:

next()hasNext()方法及其基本類型companion方法(如nextInt()hasNextInt())首先跳過匹配的任何輸入分隔符模式,然後嘗試返回下一個標記。

您可以使用useDelimiter或在構造函數中更改分隔符以匹配新行。

正如其他人在這裏所建議的,您可以使用nextLine來代替。


至於你的代碼的其他方面的改進,我會認識自己與System.lineSeparator()代替各種\n S和\r秒。