2012-06-23 22 views
1

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

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

E.g.我怎么知道“2.0”是一个数字,“伦敦”应该被视为一个类别,“6月2日星期一”或“2/6/2012”是一个日期。

我需要测试一下数据类型的一些方法,并且在向下游传递数据之前对我使用的类型有信心。

+0

如果它是一个csv,你不知道有关列的东西?我希望每个列在数据类型上保持一致... – bryanmac

+0

是的,这些列在数据类型上应该是一致的,但是您不知道这些列的类型。 – cjroebuck

回答

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类型)或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”。我测试过它,它工作。

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

就像Andrew说的那样,正则表达式可能对此很有用,但它们有点复杂。

+0

谢谢,我会将此标记为答案。我想最难的情况是检测日期。 – cjroebuck

2

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

+1

...或使用内置的'NSRegularExpression'。 – omz