String Manipulation:更高级的子字符串

时间:2013-06-06 03:45:30

标签: ios objective-c nsstring substring

你如何从下方的长串中提取“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);

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分: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