从字符串objective-c中检测类型

时间:2012-06-23 01:56:45

标签: objective-c ios types type-conversion

什么是在Objective-c中从字符串中检测数据类型的最佳方法?

我正在导入CSV文件,但每个值只是一个字符串。

E.g。我如何判断“2.0”是一个数字,“伦敦”应该被视为一个类别,“6月2日星期六”或“2/6/2012”是一个日期。

我需要测试数据类型,以便在将数据传递到下游之前对我使用的类型进行测试和确信。

2 个答案:

答案 0 :(得分:2)

正则表达式是我唯一能想到的,但是如果你使用的是mac或iphone,那么你可以试试RegexKitLite

答案 1 :(得分:1)

---------- ---------- UPDATE 而不是我以前的建议,试试这个:

NSString *csvString = @"333";
NSString *charSet = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,";
NSScanner *typeScanner = [NSScanner scannerWithString: csvString];
[typeScanner setCharactersToBeSkipped: [NSCharacterSet characterSetWithCharactersInString:charSet]];
NSString *checkString = [[NSString alloc] init];
[typeScanner scanString:csvString intoString:&checkString];

if([csvString length] == [checkString length]){

    //the string "csvString" is an integer
}

要检查其他类型(浮点数,字符串等),请将此行(检查int类型)NSString *charSet = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,";更改为NSString *charSet = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";(检查float } type)或NSString *charSet = @"1234567890";(检查只由字母组成的字符串)。

-------初始帖子-------

你可以这样做:

NSString *stringToTest = @"123";
NSCharacterSet *intValueSet = [NSCharacterSet decimalDigitCharacterSet];
NSArray *test = [stringToTest componentsSeparatedByCharactersInSet:intValueSet];


if ([test count]==[stringToTest length]+1){

    NSLog(@"It's an int!");
}
else {
    NSLog(@"It's not an int");
}

这适用于没有小数点的数字或逗号为千位分隔符,例如“8493”和“883292837”。我已经对它进行了测试,但它确实有效。

希望这为您提供一个开始!我将试着弄清楚如何测试带小数点和字符串的数字。

就像安德鲁所说,正则表达式可能对此有好处,但它们有点复杂。