从Objective-c中的字符串中检测数据类型的最佳方式是什么?从字符串中检测类型objective-c
我正在导入CSV文件,但每个值只是一个字符串。
E.g.我怎么知道“2.0”是一个数字,“伦敦”应该被视为一个类别,“6月2日星期一”或“2/6/2012”是一个日期。
我需要测试一下数据类型的一些方法,并且在向下游传递数据之前对我使用的类型有信心。
从Objective-c中的字符串中检测数据类型的最佳方式是什么?从字符串中检测类型objective-c
我正在导入CSV文件,但每个值只是一个字符串。
E.g.我怎么知道“2.0”是一个数字,“伦敦”应该被视为一个类别,“6月2日星期一”或“2/6/2012”是一个日期。
我需要测试一下数据类型的一些方法,并且在向下游传递数据之前对我使用的类型有信心。
---------- ---------- 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说的那样,正则表达式可能对此很有用,但它们有点复杂。
谢谢,我会将此标记为答案。我想最难的情况是检测日期。 – cjroebuck
正则表达式是我能想到的唯一的东西,但是如果你使用的是mac或者iphone,那么你可能会尝试使用正则表达式。 RegexKitLite
...或使用内置的'NSRegularExpression'。 – omz
如果它是一个csv,你不知道有关列的东西?我希望每个列在数据类型上保持一致... – bryanmac
是的,这些列在数据类型上应该是一致的,但是您不知道这些列的类型。 – cjroebuck