【发布时间】:2013-10-15 22:21:12
【问题描述】:
我正在尝试获取标题的第一个字母/数字,它是对象的 NSString 属性。该属性有时可能为 nil 或 = @"",因此我需要对此进行补偿。如果 标题以我需要返回的数字开头@“#”。如果它以“The Cup”开头,我需要返回“C”而忽略“The”。如果它是空的,我需要为 Unknown 返回 U。
我已经创建了以下脚本,但是在搜索 1000 个标题时它非常慢。有时我也会收到-[__NSCFString substringToIndex:]: Index 1 out of bounds; string length 0。我认为这与空字符串有关?任何其他方法,如正则表达式或我可以用来加快查询速度的方法?
- (NSString *)firstLetterInTitle{
NSString *newString = [self.title uppercaseString];
NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
if([newString length] >= 1){
if([f numberFromString:[newString substringToIndex:1]] != nil){
//All Numbers
_firstLetterInTitle = @"#";
return _firstLetterInTitle;
}
//" Hello"
if([newString length] >= 2){
if([[newString substringToIndex:1] isEqualToString:@" "]){
newString = [newString stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]];
//Returns "Hello"
}
}
if([newString length] >= 5){
if([[newString substringToIndex:4] isEqualToString:@"THE "]){
newString = [newString substringFromIndex:4];
}
}
}else{
_firstLetterInTitle = @"U";
return _firstLetterInTitle;
}
newString = [[newString componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet] invertedSet]] componentsJoinedByString:@""];
if([newString length] >= 1){
_firstLetterInTitle = [newString substringToIndex:1];
}else{
_firstLetterInTitle = @"U";
}
return _firstLetterInTitle;
}
【问题讨论】:
-
仅供参考 - 正则表达式很少,如果有的话,让事情变得更快。
-
谢谢你以后我会迷路
-
为什么空值使用“U”部分标题?将空值与实际上以“U”开头的值混合在一起不是很混乱吗?
-
@rmaddy 表示未知标题。当我将它们放在表格中时,它会将空值更改为 @"Unknown Title"
标签: ios objective-c regex cocoa-touch nsstring