2012-09-20 59 views
0

有人知道NSScanner是否會在\ n添加到字符串時正確掃描?字符串中包含NSScanner失敗 n

例如,我有一個字符串進行掃描(MyString的) 「\ NTEST \ nSuper \ n」 個

NSScanner *scanner = [NSScanner scannerWithString:myString]; 
NSString *str = @"Super"; 
if([scanner scanString:str intoString:nil]) 
{ 
    //It never reaches here 
} 

失敗的原因,看 「超級」 任何想法?這用於當我沒有\ n標誌時工作。

感謝

+0

我擔心你錯誤的工作原理 - 如果myString是「TextSuper」,由於@trudyscousin在他的答案中提到的原因,這仍然會失敗。 – rdelmar

回答

1

-[NSScanner scanString:intoString:]回報NO因爲你試圖從字符串的開頭進行掃描,而子「超級」不會出現在那裏。

我會用它來試圖說明會發生什麼:

BOOL success; 
NSString *whatDidIGet; 

// 'success' is YES, and 'whatDidIGet' contains "Test\n" 
whatDidIGet = nil; 
success = [scanner scanUpToString:str intoString:&whatDidIGet]; 

// 'success' is YES, and 'whatDidIGet' contains "Super" 
whatDidIGet = nil; 
success = [scanner scanString:str intoString:&whatDidIGet]; 

// 'success' is NO, and 'whatDidIGet' is nil. 
whatDidIGet = nil; 
success = [scanner scanUpToString:str intoString:&whatDidIGet]; 

第一個換行符被忽略的原因是,您的掃描儀(已設置它的方式),在默認情況下忽略空格和換行,所以它跳過第一個。最後,由於它跳過空格和換行符,因此whatDidIGet爲零。

編輯:

如果插入此實例掃描儀後立即:

[scanner setCharactersToBeSkipped:[[[NSCharacterSet alloc] init] autorelease]]; 

你會看到在whatDidIGet第一和第三掃描所有的換行符。

祝你在你的努力中。