2013-09-13 4 views
1

Я хочу разделить NSString на массив с частями фиксированной длины. Как я могу это сделать?Сплит-струна на детали

Я искал об этом, но я только нахожу метод ComponSeparatedByString, но не более того. Это также можно сделать вручную, но есть ли более быстрый способ сделать это?

+0

Что вы подразумеваете под «manual» или «not manual»? Компьютер является автоматом ... –

+0

Я могу взять свою строку, обрезать ее и циклически поместить обрезанную строку в массив. Проблема в том, что моя строка очень большая, мне нужно разбить ее на 10 000 частей длины строки. Всего этот массив будет содержать более 500 000 объектов. Это действительно огромная строка, поэтому мне нужен более быстрый способ, так как я знаю –

+0

, что волшебный метод, который вы ищете, не существует. В какой-то момент должен быть цикл, копирующий части вашей строки. Даже если это не сделано вами, это будет где-то в коде. –

ответ

6

Зависит от того, что вы подразумеваете под «более быстрым» - если это процессор, на который вы ссылаетесь, я бы предположил, что это сложно избить substringWithRange:, но для надежного и легкого кодирования такой проблемы регулярные выражения могут пригодится.

Вот один, который может быть использован, чтобы разделить строку на 10 символьные куски, позволяя последнюю порцию быть менее 10 символов:

NSString *pattern = @".{1,10}"; 

К сожалению, реализация Cocoa из регулярных выражений машин меньше но достаточно проста в использовании:

NSString *string = @"I want to split NSString into array with fixed-length parts. How can i do this?"; 

NSError *error = NULL; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern: pattern options: 0 error: &error]; 

NSArray *matches = [regex matchesInString:string options:0 range:NSMakeRange(0, [string length])]; 

NSMutableArray *result = [NSMutableArray array];        
for (NSTextCheckingResult *match in matches) { 
    [result addObject: [string substringWithRange: match.range]]; 
} 
+0

Спасибо! Это помогает мне –

+0

Ваше регулярное выражение соответствует «\ n» – Kevin

0

Перерыв строки в последовательность NSRanges, а затем попробуйте использовать метод NSString substringWithRange:.

0

Вы можете разделить строку по-разному. Один из способов разделить пробелами (или любой символ):

NSString *string = @"Hello World Obj C is Awesome"; 

NSArray *words = [string componentsSeparatedByString:@" "]; 

Вы можете также разделить на точных точек в строке:

NSString *word = [string substringWithRange:NSMakeRange(startPoint, FIXED_LENGTH)]; 

Просто положить его в петлю для фиксированной длины и экономить до Mutable Array:

NSMutableArray *words = [NSMutableArray array]; 
for (int i = 0; i < [string length]; i++) { 
    NSString *word = [string substringWithRange:NSMakeRange(i, FIXED_LENGTH)]; //you may want to make #define 
    [array addObject:word]; 
} 

Надеюсь, это поможет.

+0

Обратите внимание, что вы получите исключение, если диапазон находится за пределами длины строки, поэтому вам нужно будет это проверить и соответствующим образом изменить свой диапазон. – Monolo

+0

Это хорошо. Я пробую код @Monolo, и он отлично работает. Поэтому я рекомендовал использовать регулярное выражение, оно подходит для моих нужд. –

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