Этот вопрос можно перефразировать как «как я могу получить подстроку, начинающуюся с 4-го слова в строке?», Что немного легче решить. Я также предполагаю, что строки с менее чем 4 словами должны стать пустыми.
В любом случае рабочая лошадка здесь -enumerateSubstringsInRange:options:usingBlock:
, которую мы можем использовать для поиска 4-го слова.
NSString *substringFromFourthWord(NSString *input) {
__block NSUInteger index = NSNotFound;
__block NSUInteger count = 0;
[input enumerateSubstringsInRange:NSMakeRange(0, [input length]) options:(NSStringEnumerationByWords|NSStringEnumerationSubstringNotRequired) usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
if (++count == 4) {
// found the 4th word
index = substringRange.location;
*stop = YES;
}
}];
if (index == NSNotFound) {
return @"";
} else {
return [input substringFromIndex:index];
}
}
Как это работает, мы просим -enumerateSubstrings...
перечислить словами. Когда мы находим 4-е слово, мы сохраняем его исходное местоположение и выходим из цикла. Теперь, когда у нас есть начало 4-го слова, мы можем просто получить подстроку из этого индекса. Если мы не получили 4 слова, мы возвращаем @""
.
Это фактически перевернутый вопрос. Принятый ответ там также не является локальным. Он работает только для языков, которые ограничивают слова, используя пробелы. И второй ответ: а) использует более сложный API, чем мы можем теперь использовать в 'NSString', и b) предполагает, что текущая локаль - это локаль строки, тогда как I * полагает * поведение по умолчанию' -enumerateSubstrings ... 'определяет локаль из текста. –