Search code examples
iosobjective-cnsstringnsarray

how to convert NSString to NSArray


I have a string like

NSString* str = @"[90, 5, 6]";

I need to convert it to an array like

NSArray * numbers = [90, 5 , 6];

I did a quite long way like this:


+ (NSArray*) stringToArray:(NSString*)str
{
    NSString *sep = @"[,";
    NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:sep];
    NSArray *temp=[str componentsSeparatedByCharactersInSet:set];

    NSMutableArray* numbers = [[NSMutableArray alloc] init];
    for (NSString* s in temp) {
        NSNumber *n = [NSNumber numberWithInteger:[s integerValue]];
        [numbers addObject:n];
    }

    return numbers;
}

Is there any neat and quick way to do such conversion?

Thanks


Solution

  • First remove the unwanted characters from the string, like white spaces and braces:

    NSString* str = @"[90, 5, 6]";
    NSCharacterSet* characterSet = [[NSCharacterSet
                                     characterSetWithCharactersInString:@"0123456789,"] invertedSet];
    NSString* newString = [[str componentsSeparatedByCharactersInSet:characterSet]
                           componentsJoinedByString:@""];
    

    You will have a string like this: 90,5,6. Then simply split using the comma and convert to NSNumber:

    NSArray* arrayOfStrings = [newString componentsSeparatedByString:@","];
    NSMutableArray* arrayOfNumbers = [NSMutableArray arrayWithCapacity:arrayOfStrings.count];
    for (NSString* string in arrayOfStrings) {
        [arrayOfNumbers addObject:[NSDecimalNumber decimalNumberWithString:string]];
    }
    

    Using the NSString category from this response it can be simplified to:

    NSArray* arrayOfStrings = [newString componentsSeparatedByString:@","];
    NSArray* arrayOfNumbers = [arrayOfStrings valueForKey: @"decimalNumberValue"];