2011-11-29 10 views
2

입력으로 주어진 문자열이 정수가 아니거나 적어도 5 개의 영문자가 포함되어 있는지 테스트해야합니다. 루프를 사용하여 구현하는 방법을 알고 있습니다.하지만 내 생각에는 이것이 내 이걸 할 수있는 다른 효율적인 방법을 알려주시겠습니까? 예를 들어java- 문자열 유효성 확인

: 당신이 질문에 대한 나의 이해 당으로

11111111 //ERROR(Whole number) 
    1111aa11 //ERROR(less than 5 English alphabets) 
    aAAAAA11 //TRUE 
+0

현재 어떤 코드가 있습니까? –

+0

정수 또는 문자가 포함되어 있습니까? 당신의 문자열을 어떻게 확인하고 싶습니까? 번호 또는 문자? – gprathour

+0

both .. 문자열이 정수인지 또는 5 자 이하인지 확인해야합니다. – freshDroid

답변

1

예를 들어 정규식을 사용할 수 있습니다. something like [a-zA-Z]{5,}|[\\d]+

+3

그래,하지만 정규 표현식은 여전히 ​​O (n) 구현이 될 것이다. 그저 당신을 위해 장면 뒤에서 더러운 일을하는 것뿐입니다. :) –

+0

@ ElfsNu, 물론, 좋은 지적이지만, 당신이 말했듯이 아마도 당신이 할 수있는 최선은 O (n)이고 O (mn)을하는 함정에 빠지지 마십시오. 정규식은 중첩 루프 IMHO와 비교하여 관리하기가 쉽고 관리가 쉬울 것입니다. – aishwarya

0

,

은 문자열의 길이를 얻을 찾고 계십니까? 그런 다음 문자열의 .length()를 사용할 수 있습니다.

또한 정수가 Integer.parseInt (문자열)를 사용하여 정수인지 확인할 수도 있습니다.

0

당신은 다음과 같은 작동 할 수있는 주어진 문자열이 숫자입니다 테스트 예를 들어 정규 표현식을 시도해야합니다

String t = "222x"; 
String pattern2 = "(\\d+)";  
System.out.println(java.util.regex.Pattern.matches(pattern2, t)); 

실패 어떤 문자열이가 'X'의 제거 포함하고 있기 때문에 X 그리고 그것은 사실로 돌아올 것입니다. 다른 경우에도 똑같이해볼 수 있습니다.

희망이 무엇입니까 찾고 있습니다.

4

이것은 O (n) 문제입니다 ... 문자열에서 각 문자를 검사하여 숫자 나 문자가 아닌지 확인해야 할 것입니다. 알려진 알파벳 및/또는 숫자의 배열에 대해 각 문자를 검사하는 경우 실수로 O (n^2) 또는 O (mn) 문제로 바꿀 수 있습니다. 그러나 해시 테이블이나 ASCII 정규화 메서드를 사용하는 경우 O (n) 솔루션이어야하며 실제로 더 빠르게 만들 수는 없습니다. 구현 효율성에 대한 의견을 받고 싶다면 코드를 게시하십시오.

0

먼저 부울 메서드에 넣습니다. true를 반환하면 숫자이며, 그렇지 않으면 유효합니다. 아래 예를 참조하십시오.

public boolean validateInput(String x) { 

    try { 

     Integer.parseInt(x); 

    } catch (NumberFormatException ex) { 
     return false; 
    } 

    return true; 
}