Разделить NSString на NSArray пустыми строками - PullRequest
1 голос
/ 22 января 2012

Я читаю файл субтитров * .srt в строку NSString. Содержимое этой строки выглядит следующим образом:

1
00:00:20,000 --> 00:00:24,400
Altocumulus clouds occur between six thousand

2
00:00:24,600 --> 00:00:27,800
and twenty thousand feet above ground level.

Я ищу элегантное решение для разделения этой строки на NSArray, в котором каждый элемент содержит информацию, которая относится к одному конкретному субтитру - «фрейму», например, нулевой элемент будет выглядеть так:

1
00:00:20,000 --> 00:00:24,400
Altocumulus clouds occur between six thousand

Есть идеи, как элегантно выполнить эту задачу? Я попытался разбить оригинальную строку, используя метод

[string componentsSeparatedByString:@"\n\n"];

но этот метод не может обнаружить пустые строки ..

Спасибо за вашу помощь!

тоби

Ответы [ 3 ]

6 голосов
/ 22 января 2012

Если [string componentsSeparatedByString:@"\n\n"] не работает, то есть две возможности:

  1. Ваш файл содержит разрывы строк в стиле MSDOS, которые \r\n. Так что попробуйте разделить на @"\r\n\r\n".

  2. Ваши предположительно пустые строки содержат пробелы или символы табуляции. Вы можете проверить это из оболочки, используя cat -e.

4 голосов
/ 22 января 2012

Я бы предложил вместо этого использовать NSScanner. Он более гибкий, и вам не нужно беспокоиться о том, являются ли разрывы строк стилем Windows или Unix, и содержат ли пустые строки пробелы. Вот пример:

NSMutableArray *lines = [NSMutableArray array];
NSString *s = @"foo\n\nbar\r\n  \t  \r\nbaz"; //intentionally mixed line breaks
NSScanner *scanner = [NSScanner scannerWithString:s];
while (![scanner isAtEnd]) {
    [scanner scanCharactersFromSet:[NSCharacterSet newlineCharacterSet] intoString:NULL];
    NSString *line = nil;
    [scanner scanUpToCharactersFromSet:[NSCharacterSet newlineCharacterSet] intoString:&line];
    if (line) {
        [lines addObject:line];
    }
}
NSLog(@"%@", lines);
0 голосов
/ 22 января 2012

Согласно http://en.wikipedia.org/wiki/SubRip, разрывы строк - это CRLF, который будет \r\n.

...