2013-11-07 2 views
0

Итак, у меня есть строка с несколькими строками в ней, и мне нужно разбить ее. в настоящее время я использую:Split NSString и keep split charater

NSArray *a = [string componentsSeperatedByString:@"\n"]; 

Однако это избавляет от всех новых символов линии. Как я могу сохранить эти элементы как часть массива?

ответ

0

Разделите струну самостоятельно.

NSMutableArray *lines = [NSMutableArray array]; 
NSRange searchRange = NSMakeRange(0, string.length); 
while (1) { 
    NSRange newlineRange = [string rangeOfString:@"\n" options:NSLiteralSearch range:searchRange]; 
    if (newlineRange.location != NSNotFound) { 
     NSInteger index = newlineRange.location + newlineRange.length; 
     NSString *line = [string substringWithRange:NSMakeRange(searchRange.location, index - searchRange.location)]; 
     [lines addObject:line]; 
     searchRange = NSMakeRange(index, string.length - index); 
    } else { 
     break; 
    } 
} 

NSLog(@"lines = %@", lines); 
+0

Это работает. Я думаю, что есть только некоторые другие вещи, которые мне нужны, чтобы исправить другие места в коде. Благодаря! – Slayter

0

Насколько я знаю, для этого нет API. Простое решение было бы построить второй массив, начиная от компонентов, как следует

NSString *separator = @"."; 
NSArray *components = [@"ab.c.d.ef.gh" componentsSeparatedByString:separator]; 
NSMutableArray *finalComponents = [NSMutableArray arrayWithCapacity:components.count * 2 - 1]; 
[components enumerateObjectsUsingBlock:^(id component, NSUInteger idx, BOOL *stop) { 
    [finalComponents addObject:component]; 
    if (idx < components.count - 1) { 
     [finalComponents addObject:separator]; 
    } 
}]; 
NSLog(@"%@", finalComponents); // => ["ab", ".", "c", ".", "d", ".", "ef", ".", "gh"] 

не очень эффективен, но, вероятно, не огромное беспокойства, если имеет дело с очень большим числом компонентов.

+0

Ну, допустим, вы имели дело с полным текстом слов (несколько страниц). Будет ли это проблемой? – Slayter

+0

Самый простой ответ: попробуйте и посмотрите. Однако решение rmaddy, вероятно, более эффективно. –

Смежные вопросы