2014-12-03 5 views
2

자바는 .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

next()는 사용자가 숫자를 입력하더라도 문자열을 반환하므로 문자열이 의미가 없는지 여부를 확인합니다. P 단어가 맞는지 확인 하시겠습니까? –

+0

알파벳 문자가 포함 된 화이트리스트를 만들고 이름에 글자가 목록에 있는지 확인하십시오. 나는 당신이 단지 알파벳 문자를 포함해야하기 때문에 화이트리스트를 만드는 것이 더 바람직하다고 생각합니다. 금지 된 문자의 블랙리스트를 작성하면 일부 문자를 잊어 버릴 수 있습니다. –

+2

문자열에는 정수가 포함될 수 있지만 문자열에 z 문자가 포함되기를 원할 경우 , 당신은 정규식을 사용할 수 있습니다. – Lrrr

답변

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

+0

@RealSkeptic OP는 정수에 대해 구체적으로 물었습니다. 그래서 저는 이것을 작성했습니다. – Lrrr

+0

실제로 OP가 쓴 것 : \t * 사용자가 int 등이 아닌 학생 이름에 문자열을 입력하도록하려면 어떻게해야합니까? *, 단어 "etc." "et cetera", "and so on", "or like others"를 나타냅니다. – RealSkeptic

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

+1

실제로 이것은 컴파일 오류가 있습니다. 이것은 정확합니다 : "[a-zA-Z \\ s] +" – Lrrr

+0

@StephaneM : 받아 들일 답변을 편집했습니다. –

관련 문제