NSString在NSString中查找单词和下一个单词

时间:2012-02-15 15:47:19

标签: iphone objective-c nsstring

我有一个NSString *paragraph;,里面装满了N个单词。在那里,我保证有:

  

...
      名字:大卫
      姓氏:约翰逊       ...

我需要做的是找出大卫和约翰逊的字符串。但是我不知道这个名字提前是什么(大卫可能是约翰,克里斯等等。)

在C#中,我只是找到以First Name开头的行:然后用“”作为分隔符分隔单词。但是我在Objective-C中失去了如何做到这一点

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

首先使用componentsSeparatedByString

基于行分割字符串
NSArray* lines = [paragraph compontentsSeparatedByString:@"\n"];

然后您可以过滤掉以名字开头的行

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

然后,您可以根据空格进行拆分,并在“Name:”标记后面查找单词。

答案 1 :(得分: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);