0

我想以编程方式接收 JIRA 票号,例如@"ART-235",并获取裸数字/数字,@"235"

我问的关于使用正则表达式的问题出现了 Objective-C Cocoa 应用程序中的正则表达式,并带有指向https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html的链接,看起来我确实可以有一个正则表达式,例如\D*?(\d+)并通过正则表达式检索值。

但是,我想检查并询问是否有一种不那么无礼的方式来做到这一点,或者这是否是为什么 Objective-C 被称为有点过时的一个例子?第二个链接给出了我需要的一切,但它闻起来有点滑稽。对于上述目标,我是要使用正则表达式,还是有更好的惯用方式来执行这种字符串操作?

4

4 回答 4

3

听起来像 -componentsSeparatedByString: 会做你需要的。

于 2013-09-22T19:28:25.347 回答
3

获取不使用成对分隔符或嵌套的固定、已知格式的片段正是正则表达式要做的事情。我认为在这里使用一个没有问题。

但是,要按书面形式解决您的问题(关于“迭代”),您可能需要查看NSScanner,它确实通过“字符类”在字符串的字符中移动,允许您随时评估它们。

NSString * ticket = @"ART-235";

NSScanner * scanner = [NSScanner scannerWithString:ticket];
[scanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet]
                        intoString:nil];

// As an integer
NSInteger ticketNumber;
[scanner scanInteger:&ticketNumber];

// Or as a string
NSString * ticketNumber;
[scanner scanCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] 
                    intoString:&ticketNumber];
于 2013-09-22T19:36:32.913 回答
2

就像其他答案已经说过的那样:可以使用componentsSeparatedByString:@"-".

也就是说,您最初的问题是如何枚举单个字符。

并非所有字符的大小都相同,某些语言将多个字符组合成一种新语言。在枚举这样一个字符串时,您很可能希望获得该组合的结果,而不是单个片段。在 Objective-C 中,您可以像这样枚举这些组合字符:

NSString *myString = @"Hello Strings!";
[myString enumerateSubstringsInRange:NSMakeRange(0, myString.length)
                             options:NSStringEnumerationByComposedCharacterSequences
                          usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
                                  // Do something with the composed character 
                                  NSLog(@"%@", substring);
                              }];

上面的示例将一个一个地记录每个字符。

于 2013-09-22T19:35:33.220 回答
0

我为您做了一个简单的方法来解决问题,前提是票证标识符将始终采用“字符串数字”格式!

-(int) numberFromJiraTicket:(NSString*)ticketId
{
    //Get number as string
    NSString *number = [[ticketId componentsSeparatedByString:@"-"] lastObject];

    //Return the INT representation of the number
    return [number intValue];
}
于 2013-09-22T19:38:07.720 回答