Ios 从第一个空格中拆分NSString

Ios 从第一个空格中拆分NSString,ios,objective-c,regex,Ios,Objective C,Regex,我的应用程序中有一个name文本字段,其中firstname可能是中间名,lastname也可能是。现在我想用第一个空格分割这些组件,即firstname和middlename/lastname之间的空格,这样我就可以把它放到我的模型中 例如: 文本字段文本:约翰·D·索沃斯 字符串1:约翰 第二组:D.播种机 我尝试过使用[[self components separatedbycharactersinset:[NSCharacterSet whitespaceCharacterSet]]fi

我的应用程序中有一个name文本字段,其中firstname可能是中间名,lastname也可能是。现在我想用第一个空格分割这些组件,即firstname和middlename/lastname之间的空格,这样我就可以把它放到我的模型中

例如:

文本字段文本:约翰·D·索沃斯

字符串1:约翰

第二组:D.播种机

我尝试过使用
[[self components separatedbycharactersinset:[NSCharacterSet whitespaceCharacterSet]]firstObject];&[[self componentsSeparatedByCharactersInSet:[NSCharacterSet-whitespaceCharacterSet]]lastObject]
但只有当有一个名字而没有中间名时,这些才有效。因为它获取第一个和最后一个对象,而忽略中间名。

那么,我将如何实现我想要的呢

这个方法给你一个数组,所有的单词都被空格分割,这样你就可以把第一个对象作为名字,其余的对象作为中间/最后一个等

NSArray *ar = [self componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

NSString *firstName = [ar firstObject];
NSMutableString *rest = [[NSMutableString alloc] init];
for(int i = 1; i < ar.count; i++)
{
    [rest appendString:[ar objectAtIndex:i]];
    [rest appendString:@" "];
}

//now first name has the first name
//rest has the rest
NSArray*ar=[self-componentsSeparatedByCharactersInSet:[NSCharacterSet-whitespaceCharacterSet]];
NSString*firstName=[ar firstObject];
NSMutableString*rest=[[NSMutableString alloc]init];
对于(int i=1;i
可能有更简单的方法,但这是一种方法

希望能有帮助

丹尼尔


…条件赋值(
rangeOfSpace.location==NSNotFound?:
)可防止索引越界错误

我认为下面这个例子解决了你的问题

请记住,您可以直接从数组中赋值,而无需转换为字符串

以下是一个例子:

NSString *textField = @"John D. Sowers";
NSArray *fullName = [textField componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" "]];

if (fullName.count)
{
    if (fullName.count > 2)
    {
        NSLog(@"Array has more than 2 objects");
        NSString *name = fullName[0];
        NSLog(@"Name:%@",name);
        NSString *middleName = fullName[1];
        NSLog(@"Middle Name:%@",middleName);
        NSString *lastName = fullName[2];
        NSLog(@"Last Name:%@",lastName);
    }
    else if(fullName.count == 2)
    {
        NSLog(@"Array has 2 objects");
        NSString *name = fullName[0];
        NSLog(@"Name:%@",name);
        NSString *lastName = fullName[1];
        NSLog(@"Last Name:%@",lastName);
    }
    else
    {
        NSString *name = fullName[0];
    }
}

我发现这是最有力的:

NSString *fullNameString = @"\n  Barnaby Marmaduke \n \n Aloysius  ";
NSMutableArray *nameArray = [[fullNameString componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] mutableCopy];
[nameArray removeObject:@""];
NSString *firstName = [nameArray firstObject];
if(nameArray.count)
{
    [nameArray removeObjectAtIndex:0];
}
NSString *nameRemainder = [nameArray componentsJoinedByString:@" "];
鲍勃是你叔叔

NSString *fullNameString = @"\n  Barnaby Marmaduke \n \n Aloysius  ";
NSMutableArray *nameArray = [[fullNameString componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] mutableCopy];
[nameArray removeObject:@""];
NSString *firstName = [nameArray firstObject];
if(nameArray.count)
{
    [nameArray removeObjectAtIndex:0];
}
NSString *nameRemainder = [nameArray componentsJoinedByString:@" "];