2017-08-30 99 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