如何防止Java扫描仪输入空间
我试图防止用户输入空格或没有值。 但没有用。即使没有输入值,程序也不会打印我的错误。我究竟做错了什么? 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 {...
正如@ 11thdimension说,你要验证输入。
你可以这样做:
if (newcomer.isEmpty()) {
System.out.println("Please write something");
}
或者你也可以做一个while
循环,不断地问了正确的输入。
我会使用StringUtils.IsBlank()或.hasText(),因为它也检查空格。 – PanBrambor
@PanBrambor'StringUtils'不在JDK中。作为一名初学者,我怀疑他已经包括Apache Commons,并且肯定不值得仅仅为了这个任务。 – Michael
@Michael这是apache,或春天,但公平点,我猜这太适应了。 – PanBrambor
您的代码
if(username.length() == 0)
不会检查用户名是否包含空间,因为空间是朝字符串的长度计算。
要检查空字符串输入(其中可能包含的空间(S)),你可以这样做:
if("".equals(username.replaceAll("\\s+",""))) //or
if("".equals(username.trim()) //or
if(username.isEmpty())
更进一步,你可能需要使用一个do-while循环的确认,而不是使用if语句。
“,因为空间会计入字符串的长度”。他已经修剪它了。 – Michael
请不要建议甚至'“”.equals(...)'。 'isEmpty'客观上更好。 – Michael
@Michael和'.isEmpty(...)'有'NullPointerException'的倾向。每个人都有自己的优点和缺点。 – user3437460
如果你想防止发生的事情,你必须检查它。检查'newcomer'中提供的值是否为空白,并且仅在没有时才继续。 – 11thdimension
它是有道理的循环输入,直到你得到它的权利 - 我在下面的答案写了一个代码示例。 – Assafs
仅供参考,您不需要执行'userName.length()== 0',您可以执行'userName.isEmpty()'。同样的行为,但第二个更可读(你可以在这里说0是一个幻数)。 – Michael