我的应用程序中有一个名称textfield,其中firstname可能是中间名,也是姓。现在我想用第一个空格分隔这些组件,即firstname和middlename / lastname之间的空格,所以我可以将它放入我的模型中。
例如:
Textfield Text:John D. Sowers
字符串1:约翰
字符串2:D。播种者。
我尝试过使用[[self componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] firstObject]; & [[self componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] lastObject];
但是这些只有在没有中间名的情况下才有效。因为它获取第一个和最后一个对象,并且中间名被忽略。
那么我将如何实现我想要的目标呢?
答案 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:@" "];
鲍勃是你的叔叔。