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
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"];