我有一个像这样的NSString:“名字姓氏”。如何将其转换为“Firstname L.”?

时间:2012-07-03 22:18:53

标签: ios

我想将其更改为名字和最后一个名字。

谢谢!

4 个答案:

答案 0 :(得分:14)

NSString* nameStr = @"Firstname Lastname";
NSArray* firstLastStrings = [nameStr componentsSeparatedByString:@" "];
NSString* firstName = [firstLastStrings objectAtIndex:0];
NSString* lastName = [firstLastStrings objectAtIndex:1];
char lastInitialChar = [lastName characterAtIndex:0];
NSString* newNameStr = [NSString stringWithFormat:@"%@ %c.", firstName, lastInitialChar];

这可能更简洁,但我希望OP的清晰度:)因此所有临时变量和var名称。

答案 1 :(得分:4)

这样就可以了:

NSArray *components = [fullname componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSString *firstnameAndLastnameInitial = [NSString stringWithFormat:@"%@ %@.", [components objectAtIndex:0], [[components objectAtIndex:1] substringToIndex:1]];

这假设fullname是NSString的一个实例,并且包含两个由空格分隔的组件,因此您还需要检查它。

答案 2 :(得分:2)

您可以使用此代码段,首先使用componentsSeparatedByString分隔字符串,然后再次加入它们,但只获得Lastname的第一个字符

NSString *str = @"Firstname Lastname";
NSArray *arr = [str componentsSeparatedByString:@" "];
NSString *newString = [NSString stringWithFormat:@"%@ %@.", [arr objectAtIndex:0], [[arr objectAtIndex:1] substringToIndex:1]];

答案 3 :(得分:0)

单独获取名称的一部分数组:

NSString *sourceName = ...whatever...;

NSArray *nameComponents =
    [sourceName
        componentsSeparatedByCharactersInSet:
            [NSCharacterSet whitespaceCharacterSet]];

然后,我想:

NSString *compactName =
    [NSString stringWithFormat:@"%@ %@.",
        [nameComponents objectAtIndex:0],
        [[nameComponents lastObject] substringToIndex:1]];

这将跳过任何中间名,但如果只有一个名字,比如说'杰弗里',那么它将输出'杰弗里J.'。如果传入空字符串,则在尝试获取objectAtIndex:0时会引发异常,因为该数组将为空。所以你应该检查[nameComponents count]