-1

我有一个像 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)];
4

4 回答 4

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

并且出来是newDes ==>> 201

于 2013-04-15T12:22:24.453 回答
1

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

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

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

if ( parenRng.location != NSNotFound ) {
     substring = [text substringWithRange:parenRng];
}

模式分解如下:

  1. 搜索一个括号,它\\(在 Cocoa 正则表达式中是“拼写”的
  2. ...但不要将它包含在最终的子字符串中 - 由(?<=)包含括号的构造表示。这被称为积极的后视。
  3. 在括号之后,将任何字符(点)取零次或多次(星号),但在满足整个正则表达式(问号)的同时使其尽可能短
  4. 确保所有内容都以括号结尾,但不要将其包含在结果中(类似于上面 1. 中提到的左括号。这称为正向预测。
于 2013-04-15T12:53:39.863 回答
1

使用以下代码,

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

于 2013-04-15T12:40:17.287 回答
0

我想到了..

    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 为您提供快速解答。

于 2013-04-15T12:54:58.327 回答