從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