我有一個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