0

我有一个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" 

UsingsubstringToIndex是我如何获取整个字符串中的第一个字母的方法,我知道有一种方法可以通过@" "空格将字符串分隔成一个数组,但我可以弄清楚如何轻松地以所需的方式生成结果。

任何帮助都会很棒!

4

3 回答 3

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];
}
于 2013-08-02T17:06:10.917 回答
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 个以上姓名的人一起使用。

于 2013-08-02T17:18:24.253 回答
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
}
于 2013-08-02T17:24:10.077 回答