我有一个NSString *paragraph;
填充有N多字。在那里,我保证有:的NSString查找单词和下一个单词的的NSString
...
名字:大卫
姓:约翰逊
...
我需要做的是找到大卫有什么和约翰逊出这串。但是我不知道名字是提前时间什么(大卫可能是约翰·克里斯,等..)
在C#我刚刚找到开头的行名:,然后用一个单独的词“”作为分隔符。但是我失去了对如何做到这一点在Objective-C
任何帮助将不胜感激!
我有一个NSString *paragraph;
填充有N多字。在那里,我保证有:的NSString查找单词和下一个单词的的NSString
...
名字:大卫
姓:约翰逊
...
我需要做的是找到大卫有什么和约翰逊出这串。但是我不知道名字是提前时间什么(大卫可能是约翰·克里斯,等..)
在C#我刚刚找到开头的行名:,然后用一个单独的词“”作为分隔符。但是我失去了对如何做到这一点在Objective-C
任何帮助将不胜感激!
我会用一个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);
首先拆分使用componentsSeparatedByString
NSArray* lines = [paragraph compontentsSeparatedByString:@"\n"];
然后你就可以过滤掉行以名字
NSPredicate* firstNamePredicate = [NSPredicate predicateWithFormat:@"SELF beginswith 'First Name:'"];
NSArray* filteredArray = [lines filteredArrayUsingPredicate:firstNamePredicate];
那么可以拆分基于空间和查找单词基于线串跟在“Name:”标记之后。
+1 NSScanner – lawicko 2012-02-15 16:10:43
我很想听到我为什么不应该使用NSScanner这个任务,因为我用他们不少。 – 2012-02-15 16:37:35
我认为一个**应该**使用NSScanner,因此我将您的答案标记为有用的,我认为它应该是被接受的答案。 +1意味着我对智能解决方案的认可,就像[Google +1按钮](http://www.google.com/+1/button/):-) – lawicko 2012-02-15 16:44:53