2015-02-09 117 views
1

我想阻止用户在String输入中包含Space如果字符串输入包含空格,则提示错误

我已经使用了一些方法试图如:

(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: 

UPDATE:

尝试使用.nextLine()而不是.next()。但是,仍然收到错误输出:

Name of Team 1: black sheep 
Error 
Error 
[] Goals: [] Goals: 

放置[]取代原来Space/empty输出

回答

2

Scanner#next()因为空间被认为是分隔符将不会返回字符串的空间,所以对于输入像black sheep

  • 的第一次调用next()补回black
  • 和另一个调用next()将返回sheep

因为你的第二个next()调用的结果作为论据在Integer.parseInt(...)你正在NumberFormatException,因为这种方法不能解析sheep

而不是next()使用nextLine()从行读取整个字符串。

+0

谢谢我将代码更改为.nextLine()而不是.next()。这一次发生了不同的情况。它没有考虑到我对Space的投入,它仍然跳转到下一张图片 – gymcode 2015-02-09 12:37:54

+0

与我的好朋友Google找到这些信息有些麻烦。 “next()”的默认分隔符只是一个空格吗? – 2015-02-09 12:41:32

+0

我怀疑你在nextLine()之前使用了'nextInt()'或其他形式的'nextXXX()'方法。你可以在这里找到这个问题的解决方案http:// stackoverflow。com/questions/13102045/skip-nextline-after-use-nextint – Pshemo 2015-02-09 12:42:04

1

这是因为你使用的扫描仪,只需要第一个令牌,在这种情况下的下一个方法:黑色。这显然不包含空间。 如果你想整个输入,使用nextLine()

+0

谢谢我将代码改为使用'.nextLine()'而不是'.next()'。这一次发生了不同的情况。它没有在我的输入中使用'Space',它仍然跳转到下一个打印 – gymcode 2015-02-09 12:37:26

相关问题