2014-10-30 18 views
0
public final void nameErrorLoop() { 
    while (error) { 
     System.out.println("Enter the employee's name."); 
     setName(kb.next()); 
     if (name.contains("[A-Za-z]")) { 
      error = false; 
     } 
     else { 
      System.out.println("The name can only contain letters."); 
     } 
    } 
    error = true; 
} 

다른 방법으로 작동하는 비슷한 설정에도 불구하고 if 문은 항상 false이기 때문에이 메서드는 상수 루프에서 멈추게됩니다. 나는 .matches()을 시도했고, Interent에서 찾은 것이 지금까지 도움이되었습니다. 어떤 아이디어? 사전에 도움을 주셔서 감사합니다.String.contains는 항상 false로 표시됩니다.

편집 : 프로젝트를 마치면서 '이름'을 인쇄하려고하면 나중에 이름 만 표시되고 마지막은 인쇄되지 않습니다. 두 가지를 모두 포함하도록 'name'문자열을 얻을 수있는 방법이 있습니까?

답변

10

String.contains 정규 표현식을 사용하지 않습니다. "foobar"에 "oob"이 포함 된 방식으로 한 문자열에 다른 문자열이 포함되어 있는지 확인합니다.

당신이 name이 문자가 포함되어 있는지 확인 할 것이 경우에 당신이 뭔가를 확인해야합니다, 소리 :

if (name.matches("^[A-Za-z]+$")) 

(대신 *에) +는 비 비어 있는지 확인합니다 ; ^$은 문자 이외의 것이 없는지 확인합니다. - 다른 언어에서 문장 부호

if (name.matches("^[-' A-Za-z]+$")) 

또한 악센트 문자를 고려 : 당신이 그것을 전체 이름은, 그러나, 당신이 잘 공백, 하이픈 및 아포스트로피 허용 할 수있을 것으로 예상하는 경우

.

+0

또한, 미국에서 적어도, 일부 지역은 느슨한 [법률]이 (HTTP : //en.wikipedia

"anything".contains("something that's not a regular expression"); 

Pattern p2=Pattern.compile("[A-Za-z]+");//call only once p2.matcher(txt).find();//call in loop 

또는 이것을 사용 하나. org/wiki/Naming_law)을 사용하여 아동의 학대를 말하고 숫자와 다른 별난을 허용합니다 : "... 일부 주에서는 숫자 나 그림 문자의 사용을 금지합니다. 일부 주에서는 외설 사용을 금지합니다. 어떤 명명법도 없다 "고 말했다. – azurefrog

+0

완벽하게 작동 했으므로 철저한 설명에 감사드립니다. 나는 그것이 가능한 한 빨리 대답으로 표시 할 것이다. – DJOwen

+0

@azurefrog : 좋은 지적입니다. 나는 이것이 컨텍스트에 정말로 달려 있다고 생각합니다. –

0

쉬운. .contains()는 당신이 생각하는 것이 아닙니다. 정확한 문자열 일치를 수행합니다.

for(char ch: "something".toCharArray()){ 
     if(Character.isAlphabetic(ch)){ 

    } 
}