2013-08-17 2 views
-4

Мне нужно получить символы из строки, подобные этой («5, 15, 7-10») , и символы, пока первая запятая не должна писать в первую строку до тех пор, пока вторая в вторая строка и символы, разделенные тире, должны записываться в массив с пересчетом значения от первого до последнего.Синхронизация целых чисел, включая диапазон, от NSString

+0

Удаление и [перепроведение своего вопроса] (http://stackoverflow.com/questions/18294335/parsing-integers-including-a-range-from-an-nsstring) здесь не оценено. В будущем отредактируйте свой вопрос. –

ответ

1

Вы должны использовать componentSeparatedByString:

NSString *list = @"5, 15, 7-10"; 
NSArray *listItems = [list componentsSeparatedByString:@", "]; 

Это будет возвращать массив, который выглядит как @[@"5", @"15", @"7-10"];

Из того, что я понял из вашего вопроса, который должен работать. Вы можете уточнить свой вопрос, хотя его немного сложно понять. Если вы это сделаете, и то, что я сделал, не работает, я с удовольствием исправлю решение.

Edit: Следующий код делает то, что вы хотите (я думаю):

NSString *list = @"5, 15, 7-10"; 
NSArray *listItems = [list componentsSeparatedByString:@", "]; 
NSMutableArray *expandedList = [[NSMutableArray alloc] init]; 

for(NSString *s in listItems){ 
    NSRange found = [s rangeOfString:@"-"]; 
    if (found.location == 1) { 
     NSArray *hyphenString = [s componentsSeparatedByString:@"-"]; 
     NSInteger first = [[hyphenString objectAtIndex:0] intValue]; 
     NSInteger last = [[hyphenString objectAtIndex:1] intValue]; 
     [expandedList addObject:@(first)]; 
     NSInteger trueDiff = (last - first) - 1; 
     int i = 0; 
     while (i < trueDiff){ 
      first = first + 1; 
      [expandedList addObject:@(first)]; 
      i++; 
     } 
     [expandedList addObject:@(last)]; 

    } else { 
     [expandedList addObject:[NSNumber numberWithInt:[s intValue]]]; 
    } 
} 
NSLog(@"%@", expandedList); 

Это будет:

2013-08-17 21:12:54.579 NumWork[693:303] (
    5, 
    15, 
    7, 
    8, 
    9, 
    10 
) 
+0

Спасибо, что так много. Но мне нужно вернуть две строки с 5 и 15 и массив, который содержит значение от 7 до 10. –

+0

Является ли 7-10 всегда в конце строки? –

+0

Нет, это может быть везде –