2017-08-30 101 views
-1

我試圖防止用戶輸入空格或沒有值。 但沒有用。即使沒有輸入值,程序也不會打印我的錯誤。我究竟做錯了什麼? my code example如何防止Java掃描儀輸入空間

Scanner nameScan = new Scanner(System.in); 
System.out.print("Input your name: "); 

String newcomer = nameScan.nextLine();     
player.setName(newcomer); 
String userName = player.getName(); 
userName = userName.trim(); 


if (userName.length()==0) { 
    System.out.println(" "); 
    System.out.println("You have to set up a player name first... "); 
    System.out.println(" ");        
} 
else {... 
+0

如果你想防止發生的事情,你必須檢查它。檢查'newcomer'中提供的值是否爲空白,並且僅在沒有時才繼續。 – 11thdimension

+0

它是有道理的循環輸入,直到你得到它的權利 - 我在下面的答案寫了一個代碼示例。 – Assafs

+0

僅供參考,您不需要執行'userName.length()== 0',您可以執行'userName.isEmpty()'。同樣的行爲,但第二個更可讀(你可以在這裏說0是一個幻數)。 – Michael

回答

0

正如@ 11thdimension說,你要驗證輸入。

你可以這樣做:

if (newcomer.isEmpty()) { 
    System.out.println("Please write something"); 
} 

或者你也可以做一個while循環,不斷地問了正確的輸入。

+1

我會使用StringUtils.IsBlank()或.hasText(),因爲它也檢查空格。 – PanBrambor

+2

@PanBrambor'StringUtils'不在JDK中。作爲一名初學者,我懷疑他已經包括Apache Commons,並且肯定不值得僅僅爲了這個任務。 – Michael

+1

@Michael這是apache,或春天,但公平點,我猜這太適應了。 – PanBrambor

0

您的代碼

if(username.length() == 0) 

不會檢查用戶名是否包含空間,因爲空間是朝字符串的長度計算。

要檢查空字符串輸入(其中可能包含的空間(S)),你可以這樣做:

if("".equals(username.replaceAll("\\s+",""))) //or 

if("".equals(username.trim())     //or 

if(username.isEmpty())     

更進一步,你可能需要使用一個do-while循環的確認,而不是使用if語句。

+0

「,因爲空間會計入字符串的長度」。他已經修剪它了。 – Michael

+0

請不要建議甚至'「」.equals(...)'。 'isEmpty'客觀上更好。 – Michael

+0

@Michael和'.isEmpty(...)'有'NullPointerException'的傾向。每個人都有自己的優點和缺點。 – user3437460