2013-07-12 23 views
0

我相信這是string.replaceAll()方法工作方式的產物,但是出於某種奇怪的原因,當您在其中輸入任何空格時,會使其循環運行兩次?Java String replaceAll方法對循環有異常影響?

public class TestCode{ 



public static void main(String[] args) throws IOException{ 

    Scanner scan = new Scanner(System.in); 
    String input = ""; 

    while(!input.equals("X")){ 
     System.out.println("Prompt user for input"); 
     input = scan.next().toUpperCase(); 
     calculatePolynomial(input); 
    }  
} 


public static void calculatePolynomial(String input){ 
    //Clean up entry removing spaces and extracting polynomial names 
    String calculation = input.replaceAll("\\s", ""); 
    System.out.println(calculation); 
} 
} 

想法是讓代碼運行...打印出消息,提示輸入。然後處理輸入並做一些事情。一遍又一遍地重複該過程,直到輸入標記值「x」。

但是,當你鍵入包含空格的輸入時,出於某種原因,它運行循環,就好像每個單詞現在是單獨的輸入一樣。所以如果你輸入三個單詞,它只會運行三次而不是一次。

我只想讓用戶的輸入沒有空格,沒有邏輯錯誤的噩夢。

+2

您正在使用'掃描儀',並使用'next()' - 令牌*是*空格(實際上是*空白*,其中包括EOL字符)。 –

+0

'Scanner.next()'獲取用戶輸入,直到下一個空格或下一個換行符。我不確定你的預期。 –

+0

嘗試註釋calculatePolynomial函數的主體,以便它「根本不做任何事情」。結果是否按照您當前的假設行事? –

回答

5

當使用Scanner時,默認情況下,next()通過空白標記輸入。所以如果用戶輸入由空格分隔的兩個單詞,你的循環將運行兩次。

要獲取用戶輸入行中的整個輸入,請嘗試使用nextLine()方法。

+0

* facepalm *謝謝! – leigero