2014-01-31 3 views
-1

유형 이름이 들어있는 문자열이 있습니다. 따라서 그것은 유형에 대한 인스턴스가 아니며, 유형을 설명하는 문자열 값과 문자열의 입력 텍스트 만 갖습니다."string"& "integer"& "boolean"과 같은 유형 검사 문자열 값 ·

NSString *text = @"1234"; 
NSString *type = @"integer"; 

NSString *text = @"hello there"; 
NSString *type = @"string"; 

NSString *text = @"true"; 
NSString *type = @"bool"; 

tekst의 유효한 유형인지 어떻게 확인하겠습니까?

NSRegularExpression이 올바른 방법일까요, 아니면 어떻게할까요?

+0

나는 리터럴 문자열과 비교할 것 같아. (또는''@ '_ integer_string_bool_ "rangeOfString : [NSString stringWithFormat : @"_ % @ _ ", type]]'을 수행하고 그 결과가 NSNotFound가 아닌지 확인하십시오.) –

답변

0

당신은 NSScanner, 개요의 알고리즘을 사용할 수 있습니다, NSScanner의 적절한 방법, 예를 들어 전화

  • type 문자열 값을 기반으로 text 문자열
  • 에 대한 NSScanner의 인스턴스를 생성을 정수에 대한 scanInteger: 및 부울에 대한 scanString:intoString: (힌트 : 부울 리터럴 검사)
  • 스캔 방법은 YES 다음 이후에는 쓰레기 이 없는지 확인하기 위해 스캔 된 값을 isAtEnd 방법을 확인 반환하는 경우

HTH

1

다음 코드 줄이 있습니다. 문자열 (값) 부울 경우는 정수의 경우

- (NSInteger)getStringType:(NSString *)value :(BOOL)a { 
    if ([value isEqualToString:@"true"] || [value isEqualToString:@"false"]) { 
     return 2; 
    } 
    else { 
     // a: Whether to accept 0 
     NSRange range; 
     NSString *expression = @"^[1-9][0-9]*$"; 
     range = [value rangeOfString:expression options:NSRegularExpressionSearch]; 
     if (range.location != NSNotFound) { 
      return 1; 
     } else { 
      if (a == YES) { 
       if (value.length == 1 && [value isEqualToString:@"0"]) { 
        return 1; 
       } else { 
        return 0; 
       } 
      } 
      else { 
       return 0; 
      } 
     } 
    } 
} 

, 그것은 그것이 문자열이 비어 있는지, 있다면 또는, 즉 0을 반환합니다, 그것은 그렇지 않으면 1을 반환해야, 2를 반환해야합니다 그렇지 않으면 0이됩니다. 숫자로 '0'을 포함 시키려면 'a'를 YES로 설정하십시오. 이 함수는 OSX 플랫폼에서 테스트되었습니다.