2013-02-19 110 views
3

我有这样的字符串。如何获取大括号之间的子字符串?

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

如何获取子字符串53

+1

艾美奖,你找的字符串中搜索,或你知道的位置字符串已经(位置1),你只是想把它解压到另一个字符串中。 – Spectravideo328 2013-02-19 13:55:39

+0

如果你只是想提取大括号之间的子字符串,我赞同@ iDroid的答案。如果你经过更复杂的搜索,请看看这个:http://stackoverflow.com/questions/4353834/search-through-nsstring-using-regular-expression。显然要记住使用这种方法的资源成本。 – sjwarner 2013-02-19 14:08:20

+0

不。我不知道53的位置,myString将是引擎生成的随机字符串。我需要在{}之间取得53作为答案。但我现在已经弄清楚了如何去做。请参阅下面的答案。 – Emmy 2013-02-20 08:05:02

回答

1

试试看看这个代码。

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

当你得到100个气球时,你会在快乐的一天做什么? – Vladimir 2013-02-19 14:02:43

+0

为什么不只是:'NSString * value = @“53”;'? – trojanfoe 2013-02-19 14:03:17

+0

我想她问一个单一的字符串! – 2013-02-19 14:03:30

0

我猜,你一个寻找NSScanner类,至少,如果你在一般的情况下。看看苹果documentation

17
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 - 好点。

+1

你应该检查两个范围是不是NSNotFound和end.location> start.location – Keab42 2013-02-19 14:07:58

+1

感谢您的好答案。这是我做的: NSCharacterSet * delimiters = [NSCharacterSet characterSetWithCharactersInString:@“{}”]; NSArray * splitString = [myString componentsSeparatedByCharactersInSet:delimiters]; NSString * substring = [splitString objectAtIndex:1]; 的子串是53. – Emmy 2013-02-20 07:58:12

0

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

+1

就像iDroid那样,那么^^ – sjwarner 2013-02-19 14:06:14

+1

是的,他比我快了 – Apurv 2013-02-19 14:06:39

0

如果你不知道有多少个数字会出现,但你知道它总是会附在花括号试试这个:

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)]; 
} 

有可能做到这一点,虽然更有效的方式。

0

经过与任意数量的数据:

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

如果只有它的情况下牙套可以使用:

NSString *str = @"{53} balloon"; 

NSString * noBraces = [[str stringByReplacingOccurrencesOfString:@"{" withString:@""]  
stringByReplacingOccurrencesOfString:@"}" withString:@""]; 
+2

这个结果不会返回'53'。相反,它会返回'53个气球'。 – Jeremy 2013-02-19 14:09:30

+0

好,所以你只需要53个@“{53} ballon”。 – spider1983 2013-02-19 14:10:20

+0

我什么都不想要。不过,艾美表现在20个字以内。 – Jeremy 2013-02-19 14:11:01

5

这里是我的没有。

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

的子是53

+0

谢谢@艾米。这对我有效 – 2015-12-27 19:06:03

0

您可以使用正则表达式来获得括号之间的数字。这看起来有点复杂,但好处是它会找到多个号码,号码的位置并不重要。

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 
1

对于雨燕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) 
} 
相关问题