什么是在Objective-c中从字符串中检测数据类型的最佳方法?
我正在导入CSV文件,但每个值只是一个字符串。
E.g。我如何判断“2.0”是一个数字,“伦敦”应该被视为一个类别,“6月2日星期六”或“2/6/2012”是一个日期。
我需要测试数据类型,以便在将数据传递到下游之前对我使用的类型进行测试和确信。
答案 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”。我已经对它进行了测试,但它确实有效。
希望这为您提供一个开始!我将试着弄清楚如何测试带小数点和字符串的数字。
就像安德鲁所说,正则表达式可能对此有好处,但它们有点复杂。