2012-02-15 62 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:”标记之后。