2012-02-15 87 views
0

我有一個NSString *paragraph;填充有N多字。在那裏,我保證有:的NSString查找單詞和下一個單詞的的NSString

...
名字:大衛
姓:約翰遜
...

我需要做的是找到大衛有什麼和約翰遜出這串。但是我不知道名字是提前時間什麼(大衛可能是約翰·克里斯,等..)

在C#我剛剛找到開頭的行名:,然後用一個單獨的詞「」作爲分隔符。但是我失去了對如何做到這一點在Objective-C

任何幫助將不勝感激!

回答

2

我會用一個NSScanner。就像這樣:

NSString *lastName; 
NSString *firstName; 
NSString *text = @"Foobar\nFirst Name: David\nLast Name: Johnson\nFoobaz\nBarBaz"; 

NSScanner *textScanner = [NSScanner scannerWithString:text]; 

if ([textScanner scanUpToString:@"\nFirst Name: " intoString:NULL]) { 
    [textScanner scanString:@"First Name: " intoString:NULL]; 
    [textScanner scanUpToCharactersFromSet:[NSCharacterSet newlineCharacterSet] intoString:&firstName]; 
} 

// if last name always comes after first name there's no need to do this: 
[textScanner setScanLocation:0]; 

if ([textScanner scanUpToString:@"\nLast Name: " intoString:NULL]) { 
    [textScanner scanString:@"Last Name: " intoString:NULL]; 
    [textScanner scanUpToCharactersFromSet:[NSCharacterSet newlineCharacterSet] intoString:&lastName]; 
}  

NSLog(@"%@ %@", firstName, lastName); 
+0

+1 NSScanner – lawicko 2012-02-15 16:10:43

+0

我很想聽到我爲什麼不應該使用NSScanner這個任務,因爲我用他們不少。 – 2012-02-15 16:37:35

+0

我認爲一個**應該**使用NSScanner,因此我將您的答案標記爲有用的,我認爲它應該是被接受的答案。 +1意味着我對智能解決方案的認可,就像[Google +1按鈕](http://www.google.com/+1/button/):-) – lawicko 2012-02-15 16:44:53

2

首先拆分使用componentsSeparatedByString

NSArray* lines = [paragraph compontentsSeparatedByString:@"\n"]; 

然後你就可以過濾掉行以名字

NSPredicate* firstNamePredicate = [NSPredicate predicateWithFormat:@"SELF beginswith 'First Name:'"]; 
NSArray* filteredArray = [lines filteredArrayUsingPredicate:firstNamePredicate]; 

那麼可以拆分基於空間和查找單詞基於線串跟在「Name:」標記之後。