Мне нужно получить символы из строки, подобные этой («5, 15, 7-10») , и символы, пока первая запятая не должна писать в первую строку до тех пор, пока вторая в вторая строка и символы, разделенные тире, должны записываться в массив с пересчетом значения от первого до последнего.Синхронизация целых чисел, включая диапазон, от NSString
ответ
Вы должны использовать 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
)
Спасибо, что так много. Но мне нужно вернуть две строки с 5 и 15 и массив, который содержит значение от 7 до 10. –
Является ли 7-10 всегда в конце строки? –
Нет, это может быть везде –
Удаление и [перепроведение своего вопроса] (http://stackoverflow.com/questions/18294335/parsing-integers-including-a-range-from-an-nsstring) здесь не оценено. В будущем отредактируйте свой вопрос. –