2014-12-03 92 views
2

Java是很容易与您是否已经输入了一些诸如.hasNextInt()但对于一个String如何判断用户是否输入了字符串?

do { 
    System.out.println("Please enter the students name: "); 
    String name = s.nextLine(); 

    if (name.equalsIgnoreCase("Done")) { 
     finished = true; 
    } else { 
     System.out.println("Please input the students number"); 
     int studentNo = s.nextInt(); 
     System.out.println("Please enter that students subject: "); 
     String subject = s.next(); 
     System.out.println("Pleae enter that students level- "); 
     int level = s.nextInt(); 

     StudentRecords newStudent = new StudentRecords(name, studentNo, subject, level); 
     studentRecordList.add(newStudent); 
    } 
} while (!finished); 

我将如何得到它的周围循环,以确保用户输入String为学生的名字,而不是int

谢谢。

+0

下一个()返回一个字符串,即使用户输入一个数字,因此检查其是否一个字符串是没有意义的:P你的意思是检查其是否一个字? – 2014-12-03 13:11:54

+0

制作包含字母的白名单,并检查名单字母是否可以在您的列表中找到。我认为这是更好地使一个白名单,因为你只需要包括字母,通过制作禁伐字符的黑名单,你可能会忘记一些... – 2014-12-03 13:12:25

+2

的字符串可以包含整数,但如果你希望你的字符串只包含A到Z字,那么你可以使用正则表达式。 – Lrrr 2014-12-03 13:12:28

回答

0

你可以使用一个regular expression,只允许字母和空格,像这样:

boolean nameIsValid = false; 
    while (!nameIsValid)//while name is not valid 
    { 
    System.out.println("Please enter the students name: "); 
    String name = s.nextLine(); 
    if (name.matches("[A-Za-z ]*"))//match only letters/spaces 
     nameIsValid = true;//we have a valid name, we may now break out of the loop 
    else 
     System.out.println("Please enter a valid name!");//invalid name, loop again 
    } 
1

问候所以我的意见,这样的事情会做的工作:

if(!name.matches(".*\\d.*")){ 
    //It is correct name, because it does not contain any integer. 
} else{ 
    //retry getting name from user because it contains integer. 
} 

编辑方面发表评论:上面的代码,将检测输入中包含的任意整数,但如果你要检查,如果它只是包含的字符,你可以这样做:

!name.matches("[a-zA-Z ]+") 
+0

如果用户输入'++ !! Zabc ??''? – RealSkeptic 2014-12-03 13:18:21

+0

@RealSkeptic OP问到具体关于整数,所以我写了这个。 – Lrrr 2014-12-03 13:20:10

+0

其实,OP写的是: \t *我怎么会得到它的周围循环,以确保用户输入的学生名称的String,不是int等。*,守信用“等。”表示“等等”,“等等”,“或其他喜欢它的人”。 – RealSkeptic 2014-12-03 13:32:50

3

使用正则表达式请尝试以下循环:

String name=""; 
while(!name.matches("[a-zA-Z \'\-ÄäÖöÜüßÉéæø]+")){ 
    System.out.println("Please enter the student name: "); 
    name = s.nextLine(); 
} 

这会要求用户输入,直到一个有效的名称中给出。

+3

如果没有名为Le Cleac'h,Jürgen或Aakjær的学生,这应该起作用。 – StephaneM 2014-12-03 13:26:00

+1

其实这有编译错误,这是正确的: “[A-ZA-Z \\ S] +” – Lrrr 2014-12-03 13:29:05

+0

@StephaneM:我编辑的答案接受。 – 2014-12-03 13:37:25

相关问题