2012-06-13 3 views
0

Я динамически добавления и удаления подстроки из NSString -Динамически добавлять и удалять подстроку из NSString

В конкретных действиях я присоединените с помощью (я использую запятую при добавлении новой строки) -

self.selectedString = [self.selectedString length] < 1 ? newSelectedString 
                 : [self.selectedString stringByAppendingFormat:@",%@",newSelectedString]; 

Removing - Теперь эта запятая создает проблему для меня при удалении строки. В настоящее время я использую решение для этого, как -

self.selectedString = [self.selectedString stringByReplacingOccurrencesOfString:newSelectedString 
                    withString:@""]; 

NSRange rangeSingleComma = [self.selectedString rangeOfString:@","]; 
NSRange rangeDoubleComma = [self.selectedString rangeOfString:@",,"]; 
if (rangeSingleComma.location == [self.selectedString length] - 1) { 
    self.selectedString = [self.selectedString substringToIndex:[self.selectedString length] - 1]; 
} 
if (rangeSingleComma.location == 0) { 
    self.selectedString = [self.selectedString substringFromIndex:1]; 
} 
if (rangeDoubleComma.location != NSNotFound) { 
    self.selectedString = [self.selectedString stringByReplacingOccurrencesOfString:@",," 
                     withString:@","]; 
} 

Но это очень грязный подход, может ли один предложить хороший подход для этого.

ответ

2

Вам нужно сохранить этот список, разделенный запятой, как строку? Вместо этого попробуйте использовать NSArray/NSMutableArray из NSString. Это упрощает добавление или удаление любого элемента по своему усмотрению. При необходимости через запятую строковое представление массива, просто сделать:

[self.selectedArray componentsJoinedByString:@","] 

Если вы хотите по-прежнему использовать self.selectedString свойство, просто поместите выше строку кода в метод получения:

- (NSString *) selectedString { 
     return [self.selectedArray componentsJoinedByString:@","] 
} 
+0

Yea. это определенно лучший подход, я буду использовать это. Благодаря!! – rishi

5

Вы могли бы сделать что-то вроде этого

NSString *str = @"aaa,bbb,ccc"; 
NSMutableArray *arr = [[str componentsSeparatedByString:@","] mutableCopy]; 

int indexToRemove = -1; 
for (int i = 0; i < arr.count; i++) { 
    NSString *string = [arr objectAtIndex:i]; 
    if([string isEqualToString:@"aaa"]) 
    { 
     indexToRemove = i; 
     break; 
    } 
} 

if(indexToRemove != -1) 
{ 
    [arr removeObjectAtIndex:indexToRemove]; 
} 

NSString *newString = [arr componentsJoinedByString:@","]; 
+0

+1 за хорошее предложение, но мне нравится предложение Адама, поэтому я пойду с этим подходом. – rishi