我想阻止用户在Space
输入中加入String
。
我尝试过使用一些方法,例如:
(team1Name.contains(" "))
(team1Name.matches(".*([ \t]).*"))
(team1Name.indexOf(' ') >= 0)
但无济于事。
下面是我的代码片段和输出:
代码段:
System.out.print("Name of Team 1: ");
team1Name = sc.next();
if (team1Name.indexOf(' ') >= 0) {
System.err.println("Error");
System.out.print("Name of Team 1: ");
team1Name = sc.next();
}
System.out.print(team1Name+ " Goals: ");
while (true) {
try {
team1Goals = Integer.parseInt(sc.next());
break;
} catch (NumberFormatException nfe) {
System.err.println("Error");
System.out.print(team1Name+ " Goals: ");
}
}
输出:
Name of Team 1: black sheep
Error
black Goals: black Goals:
更新:
尝试使用.nextLine()
代替.next()
。但是,仍然会收到错误输出:
Name of Team 1: black sheep
Error
Error
[] Goals: [] Goals:
放置[]
以替换原始Space
/ empty
输出
答案 0 :(得分:2)
Scanner#next()
不会返回带空格的字符串,因为空格被视为分隔符,因此对于像black sheep
next()
填充返回black
next()
的另一次调用将返回sheep
。 由于您的第二次next()
调用的结果被用作Integer.parseInt(...)
中的参数,因此此方法无法解析NumberFormatException
。
使用sheep
来代替next()
从行读取整个字符串。
答案 1 :(得分:1)
这是因为您使用扫描程序的下一个方法,它只接受第一个令牌,在这种情况下:黑色。这显然不包含空格。 如果您想要整个输入,请使用nextLine()