如何获得大括号之间的子串?

我有一个字符串。

NSString *myString = @"{53} balloons"; 

如何获得子串53

 NSString *myString = @"{53} balloons"; NSRange start = [myString rangeOfString:@"{"]; NSRange end = [myString rangeOfString:@"}"]; if (start.location != NSNotFound && end.location != NSNotFound && end.location > start.location) { NSString *betweenBraces = [myString substringWithRange:NSMakeRange(start.location+1, end.location-(start.location+1))]; } 

编辑 :增加范围检查,thx到Keab42 – 好点。

这就是我做的。

 NSString *myString = @"{53} balloons"; NSCharacterSet *delimiters = [NSCharacterSet characterSetWithCharactersInString:@"{}"]; NSArray *splitString = [myString componentsSeparatedByCharactersInSet:delimiters]; NSString *substring = [splitString objectAtIndex:1]; 

子串是53。

试试这个代码。

  NSString *myString = @"{53} balloons"; NSString *value = [myString substringWithRange:NSMakeRange(1,2)]; 

您可以使用正则表达式来获取大括号之间的数字。 这可能看起来有点复杂,但好的一面是它会找到多个数字并且数字的位置无关紧要。

 NSString *searchText = @"{53} balloons {12} clowns {123} sparklers"; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\{(\\d+)\\}" options:0 error:nil]; NSArray *matches = [regex matchesInString:searchText options:0 range:NSMakeRange(0, searchText.length)]; for (NSTextCheckingResult *r in matches) { NSRange numberRange = [r rangeAtIndex:1]; NSLog(@"Number: %@", [searchText substringWithRange:numberRange]); } 

这将打印出来:

 Number: 53 Number: 12 Number: 123 

对于Swift 2.1: –

 var start = strData?.rangeOfString("{") var end = strData?.rangeOfString("}") if (start!.location != NSNotFound && end!.location != NSNotFound && end!.location > start!.location) { var betweenBraces = strData?.substringWithRange(NSMakeRange(start!.location + 1, end!.location-(start!.location + 1))) print(betweenBraces) } 

我想,你正在寻找NSScanner类,至少如果你正在解决一般情况。 看看苹果文档 。

搜索“{”和“}”的位置。 在这些索引之间取子串。

检查任意数量的数据:

  NSString *str = @"{53} balloons"; NSArray* strary = [str componentsSeparatedByString: @"}"]; NSString* str1 = [strary objectAtIndex: 0]; NSString *str2 = [str1 stringByReplacingOccurrencesOfString:@"{" withString:@""]; NSLog(@"number = %@",str2); 

另一种方法是

 NSString *tmpStr = @"{53} balloons"; NSRange r1 = [tmpStr rangeOfString:@"{"]; NSRange r2 = [tmpStr rangeOfString:@"}"]; NSRange rSub = NSMakeRange(r1.location + r1.length, r2.location - r1.location - r1.length); NSString *subString = [tmpStr substringWithRange:rSub]; 

如果您不知道将有多少位数,但是您知道它将始终用大括号括起来试试这个:

 NSString *myString = @"{53} balloons"; NSRange startRange = [myString rangeOfString:@"{"]; NSRange endRange = [myString rangeOfString:@"}"]; if (startRange.location != NSNotFound && endRange.location != NSNotFound && endRange.location > startRange.location) { NSString *value = [myString substringWithRange:NSMakeRange(startRange.location,endRange.ocation - startRange.location)]; } 

尽管如此,这可能是一种更有效的方法。