2012-06-23 26 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