在 iOS 開發中,常遇到需要處理人名字符串的需求。例如有一個完整姓名 @"David Campbell",我們想將其截斷為 @"David C" —— 保留名字全拼,姓氏僅保留首字母加點號。
利用 NSString 的 rangeOfString:options: 方法從後向前查找最後一個空格位置,再配合 substringToIndex: 截取。關鍵在於 NSBackwardsSearch 選項可確保找到最後一個空格,避免中間名干擾。
NSString *str = @"David Campbell";
NSRange range = [str rangeOfString:@" " options:NSBackwardsSearch];
if (range.location != NSNotFound) {
// +2 包含空格和姓氏首字母
NSString *result = [str substringToIndex:range.location + 2];
NSLog(@"%@", result); // 輸出: David C
}
stringByReplacingOccurrencesOfString:withString: 規範化range.location != NSNotFound 防止無空格字符串崩潰封裝為 NSString 分類方法:
@interface NSString (NameAbbreviation)
- (NSString *)abbreviatedSurname;
@end
@implementation NSString (NameAbbreviation)
- (NSString *)abbreviatedSurname {
NSRange range = [self rangeOfString:@" " options:NSBackwardsSearch];
if (range.location == NSNotFound) return self;
return [self substringToIndex:MIN(range.location + 2, self.length)];
}
@end
使用時只需 [fullName abbreviatedSurname] 即可獲得統一格式結果。