Разделите NSStrings на абзацы

Я получаю простой текст из xml-потока и хочу знать, есть ли способ разбить этот текст на абзацы. Я пытаюсь:

*htmlbody = [item.text stringByReplacingOccurrencesOfString:@"\n" withString:@"<br />"]; 

но это не работает.


person Jimmy    schedule 04.10.2011    source источник


Ответы (4)


NSArray *paragraphs = [item.text componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];

Дает вам массив строк (по одной на абзац) для всех вариантов завершения строки.

person jrturton    schedule 04.10.2011

Используйте enumerateSubstringsInRange:options:usingBlock: с NSStringEnumerationByParagraphs.

person Rudolf Adamkovič    schedule 24.05.2013

Первый и самый распространенный подход:

NSArray *arr = [myString componentsSeparatedByString:@"\n"];

Однако при этом игнорируется тот факт, что существует ряд других способов представления абзаца или разрыва строки в строке — \r, \r\n или разделители Unicode.

Из Руководства по программированию строк от Apple:

    NSString *string = /* assume this exists */;
    unsigned length = [string length];
    unsigned paraStart = 0, paraEnd = 0, contentsEnd = 0;
    NSMutableArray *array = [NSMutableArray array];
    NSRange currentRange;
    while (paraEnd < length) {
        [string getParagraphStart:&paraStart end:&paraEnd
                      contentsEnd:&contentsEnd forRange:NSMakeRange(paraEnd, 0)];
        currentRange = NSMakeRange(paraStart, contentsEnd - paraStart);
        [array addObject:[string substringWithRange:currentRange]];
    }

Это даст вам массив NSString с вашими абзацами.

person Youssef    schedule 04.10.2011

Похоже, вы на правильном пути. Или, по крайней мере, это определенно подход, который я бы попробовал.

Возможно, ваши новые строки содержат возврат каретки, поэтому попробуйте \r\n или, возможно, даже \n\n, но без фактического содержимого, которое вы пытаетесь проанализировать, трудно понять, что вы должны использовать в качестве разделителя.

Взгляните на документацию NSString для componentSeperatedByString:

NSString *list = @"Norman, Stanley, Fletcher";
NSArray *listItems = [list componentsSeparatedByString:@", "];
person CaptainRedmuff    schedule 04.10.2011