2013-06-06 2 views
0

Как вы можете извлечь «19» из длинной строки ниже? Вот как бы я это сделал, но мне было интересно, есть ли лучший способ?Строка Манипуляция: более продвинутая подстрока

NSString *myString = @"13.5 Points-(19) 38 Points-(50) 50 Points-(215) 4.3 Points-105.8 Points-21"; 
NSArray *myArray = [myString componentsSeparatedByString:@"-"]; 

NSString *splitString = [myArray  objectAtIndex:1    ]; 
NSRange range   = [splitString rangeOfString:@")"   ]; 
NSString *newString = [splitString substringToIndex:range.location]; 

NSString *newString2 = [newString stringByReplacingOccurrencesOfString:@"(" withString:@""]; 

NSLog(@"newString2: %@", newString2); 

ответ

4

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

Решение действительно зависит от формата, который будет иметь строка. Если вы хотите, чтобы подстрока всегда была в первой паре круглых скобок, было бы более эффективно использовать rangeOfString, чтобы получить первые ( и первые ). Затем вы извлекаете кусок между ними.

Пример (без надлежащей проверки ошибок):

NSString *myString = @"13.5 Points-(19) 38 Points-(50) 50 Points-(215) 4.3 Points-105.8 Points-21"; 
NSRange openRange = [myString rangeOfString:@"("]; 
NSRange closeRange = [myString rangeOfString:@")"]; 

NSRange resultRange = NSMakeRange(openRange.location + 1, closeRange.location - openRange.location - 1); 
NSString *result = [myString substringWithRange:resultRange]; 
0

Попробуйте

NSString *myString = @"13.5 Points-(19) 38 Points-(50) 50 Points-(215) 4.3 Points-105.8 Points-21"; 
NSArray *strArr = [myString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString: @"()"]]; 

NSLog(@"myString..%@",[strArr objectAtIndex:1]);// myString..19 
Смежные вопросы