我想以编程方式接收JIRA票号,例如@"ART-235"
,并获取裸号/ @"235"
。
我询问有关使用正则表达式的问题显示Regular expressions in an Objective-C Cocoa application带有https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html的链接,看起来我确实可以使用\D*?(\d+)
这样的正则表达式并检索值通过正则表达式。
但是,我想检查并询问是否有更少的bletcherous方式来做这个,或者这是为什么Objective-C被称为有点过时的一个例子?第二个链接给出了我需要的一切,但它闻起来有点滑稽。对于上面提到的目标,我是否想要使用正则表达式,还是有更好的惯用方法来执行这种字符串操作?
答案 0 :(得分:3)
听起来像-componentsSeparatedByString:会做你需要的。
答案 1 :(得分: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];
答案 2 :(得分: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);
}];
上面的示例将逐个记录每个字符。
答案 3 :(得分:0)
我为你制作了一个简单的方法,只要你能做到这一点 票证标识符将始终采用“字符串数字”格式!
-(int) numberFromJiraTicket:(NSString*)ticketId
{
//Get number as string
NSString *number = [[ticketId componentsSeparatedByString:@"-"] lastObject];
//Return the INT representation of the number
return [number intValue];
}