键入检查字符串值,如“string”& “整数”& “布尔”?

时间:2014-01-31 00:45:58

标签: objective-c

我有包含类型名称的字符串。因此它不是类型的实例,我只有描述类型的字符串值和字符串中的输入文本。

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

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

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

如何检查它是否是来自tekst的有效类型。

NSRegularExpression会是正确的方式,或者你会怎么做?

2 个答案:

答案 0 :(得分: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;
            }
        }
    }
}

如果字符串(值)是布尔值,它应该返回2.如果它是一个整数,它应该返回1.否则,它将返回0.也就是说,如果它是一个字符串,无论它是否为空,你' ll得到0.如果要将'0'作为数字包含,请将'a'设置为YES。此功能在 OSX 平台下进行测试。

答案 1 :(得分:0)

您可以使用NSScanner,大纲中的算法:

  • 为您的NSScanner字符串
  • 创建text的实例
  • 根据type字符串的值,调用NSScanner的相应方法,例如scanInteger:表示整数,scanString:intoString:表示布尔值(提示:扫描布尔文字)
  • 如果扫描方法返回YES,请检查isAtEnd方法以确保扫描值后没有垃圾

HTH