Возможно, вы захотите использовать NSScanner в цикле, чтобы собрать подобные вещи, но чтобы выяснить точный алгоритм, вам необходимо уточнить, как именно вы хотите, чтобы он работал.Вот вопросы, на которые вам нужно было бы ответить:
- Если последовательность слов из более чем одного пробела "свернута" в один пробел для переноса текста, или последовательность из 5 последовательных словпробелы считаются 5 символами против ваших 10 символов в строке?Я предполагаю, что вы хотите, чтобы несколько пробелов были свернуты, а не сохранены
- Как вы хотите, чтобы это работало, если у вас есть одно слово длиной более 10 символов?Вы хотите, чтобы строка заканчивалась строкой длиной более 10 символов, или вы бы предпочли вставить новую строку и вызвать разрыв строки в середине слова в этой ситуации?Я предполагаю, что вы хотите, чтобы слова длиной более 10 символов расширялись за пределы ограничения в 10 символов.
Учитывая эти предположения о вашей проблеме, я написал бы ее следующим образом:
NSMutableString *resultString = [[NSMutableString alloc] init];
NSMutableString *currentLine = [[NSMutableString alloc] init];
NSScanner *scanner = [NSScanner scannerWithString:sourceString];
NSString *scannedString = nil;
while ([scanner scanUpToCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString: &scannedString]) {
if ([currentLine length] + [scannedString length] <= 10) {
[currentLine appendFormat:@"%@ ", scannedString];
}
else if ([currentLine length] == 0) { // Newline but next word > 10
[resultString appendFormat:@"%@\n", scannedString];
}
else { // Need to break line and start new one
[resultString appendFormat:@"%@\n", currentLine];
[currentLine setString:[NSString stringWithFormat:@"%@ ", scannedString]];
}
[scanner scanCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString:NULL];
}