我有一个包含用户全名的NSString
。有些名字属于标准的第一个和最后一个形式(Kyle Begeman),其他名称只是一个名称(TechCrunch)。
我如何按原样获取名字,然后获取姓氏的第一个名字,如果只有一个名字,只需抓住整个名字?
基本上我希望将上述内容转换为Kyle B.或者根据名称转换为TechCrunch。
NSString *username = @"Kyle Begeman"
NSString *otherUserName = @"TechCrunch"
converted to
@"Kyle B"
// No conversion because it is a single word name
@"TechCrunch"
使用substringToIndex
是我如何抓住整个字符串中的第一个字母,我知道有一种方法可以将@" "
空格分隔成数组,但我可以弄清楚如何很容易按照需要的方式产生结果。
任何帮助都会很棒!
答案 0 :(得分:2)
找到字符串中第一个空格的位置pos
。如果没有空格,或者空格是字符串的最后一个字符,则返回整个字符串;否则,返回范围从零到pos+1
的子字符串,包括:
NSRange range = [str rangeOfString:@" "];
if (range.location == NSNotFound || range.location == str.length-1) {
return str;
} else {
return [str substringToIndex:range.location+1];
}
答案 1 :(得分:2)
(NSString*)firstNameWithInitial:(NSString*)userName {
NSArray *array = [userName componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
array = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF != ''"]];
NSString *firstName = [array objectAtIndex:0];
NSString finalNameString;
if ([array count] > 1) {
NSString *lastNameInitial = [[array objectAtIndex:1] substringToIndex:1];
finalNameString = [firstName stringByAppendingString:[NSString stringWithFormat:@" %@", lastNameInitial]];
else {
finalNameString = firstName;
}
return finalNameString;
}
此功能应该返回您需要的内容。请注意,您可以通过检查数组中的对象数来修改此选项以使用具有2个以上名称的人员。
答案 2 :(得分:0)
您可以使用NSScanner查找子字符串。
NSString *name = @"Some name";
NSString *firstName;
NSString *lastName;
NSScanner *scanner = [NSScanner scannerWithString:name];
[scanner scanUpToString:@" " intoString:&firstName]; // Scan all characters up to the first space
[scanner scanUpToString:@"" intoString:&lastName]; // Scan remaining characters
if (lastName != nil) {
// It was no space and lastName is empty
} else {
// There was at least one space and lastName contains a string
}