从第一个空格拆分NSString

时间:2014-05-29 17:46:01

标签: ios objective-c regex

我的应用程序中有一个名称textfield,其中firstname可能是中间名,也是姓。现在我想用第一个空格分隔这些组件,即firstname和middlename / lastname之间的空格,所以我可以将它放入我的模型中。

例如:

Textfield Text:John D. Sowers

字符串1:约翰

字符串2:D。播种者。

我尝试过使用[[self componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] firstObject]; & [[self componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] lastObject]; 但是这些只有在没有中间名的情况下才有效。因为它获取第一个和最后一个对象,并且中间名被忽略。 那么我将如何实现我想要的目标呢?

4 个答案:

答案 0 :(得分:11)

/*fullNameString is an NSString*/
NSRange rangeOfSpace = [fullNameString rangeOfString:@" "];
NSString *first = rangeOfSpace.location == NSNotFound ? fullNameString : [fullNameString substringToIndex:rangeOfSpace.location];
NSString *last = rangeOfSpace.location == NSNotFound ? nil :[fullNameString substringFromIndex:rangeOfSpace.location + 1];

...条件赋值(rangeOfSpace.location == NSNotFound ? <<default value>> : <<real first/last name>>)可以防止索引超出范围错误。

答案 1 :(得分:4)

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

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

可能有更简单的方法,但这是一种方式..

希望有所帮助

丹尼尔

答案 2 :(得分:1)

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

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

以下是一个例子:

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];
    }
}

答案 3 :(得分: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:@" "];
鲍勃是你的叔叔。

相关问题