从 Objective-c 中的字符串中检测数据类型的最佳方法是什么?
我正在导入 CSV 文件,但每个值只是一个字符串。
例如,我如何判断“2.0”是一个数字,“London”应该被视为一个类别,而“Monday 2nd June”或“2/6/2012”是一个日期。
在将数据传递到下游之前,我需要以某种方式测试数据类型,并对使用哪种类型充满信心。
从 Objective-c 中的字符串中检测数据类型的最佳方法是什么?
我正在导入 CSV 文件,但每个值只是一个字符串。
例如,我如何判断“2.0”是一个数字,“London”应该被视为一个类别,而“Monday 2nd June”或“2/6/2012”是一个日期。
在将数据传递到下游之前,我需要以某种方式测试数据类型,并对使用哪种类型充满信心。
正则表达式是我唯一能想到的,但如果你在 mac 或 iphone 上,你可以试试 RegexKitLite
----------更新--------- 代替我之前的建议,试试这个:
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”。我已经对其进行了测试,并且可以正常工作。
希望这为您提供了一个开始!我将尝试弄清楚如何测试带有小数点和字符串的数字。
就像安德鲁说的那样,正则表达式可能对此有好处,但它们有点复杂。