从字符串中拉出名字和最后一个名字

时间:2013-08-02 17:01:42

标签: ios parsing nsstring

我有一个包含用户全名的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是我如何抓住整个字符串中的第一个字母,我知道有一种方法可以将@" "空格分隔成数组,但我可以弄清楚如何很容易按照需要的方式产生结果。

任何帮助都会很棒!

3 个答案:

答案 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
}