我正在尝试获取标题的第一个字母/数字,它是对象的 NSString 属性。该属性有时可能为 nil 或 = @"",因此我需要对此进行补偿。如果标题以数字开头,我需要返回@"#"。如果它以“The Cup”开头,我需要返回“C”而忽略“The”。如果它是空的,我需要为未知返回 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;
}