1

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

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

例如,我如何判断“2.0”是一个数字,“London”应该被视为一个类别,而“Monday 2nd June”或“2/6/2012”是一个日期。

在将数据传递到下游之前,我需要以某种方式测试数据类型,并对使用哪种类型充满信心。

4

2 回答 2

2

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

于 2012-06-23T02:04:36.357 回答
1

----------更新--------- 代替我之前的建议,试试这个:

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”。我已经对其进行了测试,并且可以正常工作。

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

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

于 2012-06-23T02:26:32.160 回答