Iphone 如何获取括号之间的子字符串

Iphone 如何获取括号之间的子字符串,iphone,ios,xcode,nsstring,Iphone,Ios,Xcode,Nsstring,我有一个类似ConsumerVisit(201)或Date(CX1)的字符串。如何获取括号“(“”)”中的字符串 我用以下代码尝试了几次,但它在substringWithRange中崩溃了 NSRange match; NSRange match1; match = [_actType.text rangeOfString: @"("]; match1 = [_actType.text rangeOfString: @")"]; NSLog(@"%i,%i",ma

我有一个类似ConsumerVisit(201)或Date(CX1)的字符串。如何获取括号“(“”)”中的字符串

我用以下代码尝试了几次,但它在substringWithRange中崩溃了

NSRange match;
    NSRange match1;
    match = [_actType.text rangeOfString: @"("];
    match1 = [_actType.text rangeOfString: @")"];
    NSLog(@"%i,%i",match.location,match1.location);
    NSString *newDes = [_actType.text substringWithRange: NSMakeRange (match.location, match1.location-1)];
试试下面的代码

NSString *newDes = _actType.text;
NSArray *strArray = [newDes componentsSeparatedByString:@"("];
newDes = [strArray objectAtIndex:1];
strArray = [newDes componentsSeparatedByString:@")"];
newDes = [strArray objectAtIndex:0];
newDes的值应为201

我用你的价值观像贝娄

NSString *newDes = @"ConsumerVisit(201)";
NSArray *strArray = [newDes componentsSeparatedByString:@"("];
newDes = [strArray objectAtIndex:1];
strArray = [newDes componentsSeparatedByString:@")"];
newDes = [strArray objectAtIndex:0];
NSLog(@"\n\n newDes ==>> %@",newDes);

而get out put isnewDes==>>201

使用以下代码

NSString *subString = nil;
NSString * myString = @" hello(1234)";
NSRange range1 = [myString rangeOfString:@"("];
NSRange range2 = [myString rangeOfString:@")"];

if ((range1.length == 1) && (range2.length == 1) && (range2.location > range1.location))
{
    NSRange range3;
    range3.location = range1.location+1;
    range3.length = (range2.location - range1.location)-1;

    subString = [myString substringWithRange:range3];
}
NSLog(@"%@",subString);

输出===>1234

如果您有足够的冒险精神,您可以使用实际为此目的创建的正则表达式。不过,他们确实需要一点时间来适应

NSString *text = @"ConsumerVisit(201)";
NSString *substring = nil;

NSRange parenRng = [text rangeOfString: @"(?<=\\().*?(?=\\))" options: NSRegularExpressionSearch];

if ( parenRng.location != NSNotFound ) {
     substring = [text substringWithRange:parenRng];
}
NSString*text=@“ConsumerVisit(201)”;
NSString*子字符串=nil;
NSRange parenRng=[text rangeOfString:@”(?我算出了

    NSString *originalString = @"ConsumerVisit(201)"
    NSRange start = [originalString rangeOfString:@"("];
    NSRange end = [originalString rangeOfString:@")"];
    NSString *betweenBraces;
    if (start.location != NSNotFound && end.location != NSNotFound && end.location > start.location) {
        betweenBraces = [originalString substringWithRange:NSMakeRange(start.location+1, end.location-(start.location+1))];
    }
    NSLog(@"Sub string: %@", betweenBraces);
输出>子字符串:201


感谢@paras n@vinu为您提供的快速回答。

它运行良好,但会分配数组,如果您正在处理成千上万的数据,这可能是有害的。带范围的解决方案在内存方面效率更高。是的,您首先是对的,我想和您一样,但在我阅读了问题之后,这里我定义了ConsumerVisit(201)或Date(CX1)所以我举了一个简单的例子,让他很容易理解。顺便说一句,thanx@Cyrille:)崩溃发生是因为您使用了错误参数的NSMakerRange。秒数应该是范围的长度,而不是它的结束位置。代码中的最后一行应该是这样的:
NSString*newDes=[\u actType substringWithRange:NSMakeRange(match.location+1,match1.location-match.location-1)];