2013-02-19 94 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) 
} 
相關問題