Манипулировать NSString в 2D NSMutableArray - PullRequest
0 голосов
/ 05 апреля 2011

У меня 13 строк текста в следующем формате: «1234 56789 1235 98765 ...» (четыре цифры - пробел - пять цифр) зациклить 3 раза. Дело в том, что иногда пустое пространство может отсутствовать. вот так: «1234 56789 123598765 ...», но разделительные 4 и 5 цифры по-прежнему актуальны.

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

for (int column = 0; column < 6; column++) {
        // take first 4 digits
        cursor_offset += 4; 
        temp = [entry substringWithRange:NSMakeRange(cursor,cursor_offset)];
        cursor = cursor_offset; // update cursor position
        if ([entry substringWithRange:NSMakeRange(cursor_offset,cursor_offset+1)] isEqualToString:@" "]) {
            // space jump
            cursor_offset+=1; // identify blank space and jump over it
        }

после этого я иду дальше и пытаюсь взять еще 6 цифр ... Есть ли более умный способ сделать это? я думал о регулярном выражении, с которым я бы не стал спорить. любая лучшая практика?

1 Ответ

1 голос
/ 06 апреля 2011

Я бы, вероятно, просто удалил все пробелы из строки, а затем разбил на части:

NSString *source = @"1234 56789 1234 1234 56789 1234 1234 56789 1234 1234 56789 1234 1234 56789 1234";
NSString *stripped = [[source componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet] componentsJoinedByString:@""];

NSAssert([stripped length] % 13 == 0, @"string length must be a multiple of 13");

NSMutableArray *sections = [NSMutableArray array];
for (NSInteger location = 0; location < [stripped length]; location += 13) {
  NSString *substring = [stripped substringWithRange:NSMakeRange(location, 13)];
  NSArray *fields = [NSArray arrayWithObjects:
                     [substring substringWithRange:NSMakeRange(0,4)],
                     [substring substringWithRange:NSMakeRange(4,5)],
                     [substring substringWithRange:NSMakeRange(9,4)],
                     nil];
  [sections addObject:fields];
}

Предупреждение, набрано в браузере и не скомпилировано. Caveat Implementor

...