【问题标题】:Split NSString from first whitespace从第一个空格中拆分 NSString
【发布时间】:2014-05-29 17:46:01
【问题描述】:
我的应用程序中有一个名称文本字段,其中名字可能是中间名和姓氏。现在我想用第一个空格分割这些组件,名字和中间名/姓氏之间的空格,所以我可以把它放到我的模型中。
例如:
文本字段文本:John D. Sowers
字符串 1:约翰
字符串 2:D. 播种者。
我尝试过使用[[self componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] firstObject]; & [[self componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] lastObject];
但这些只有在没有中间名的情况下才有效。因为它获取第一个和最后一个对象,中间名被忽略。
那么我将如何设法完成我想要的呢?
【问题讨论】:
标签:
ios
objective-c
regex
【解决方案1】:
/*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>>) 可防止出现索引越界错误。
【解决方案2】:
该方法为您提供了一个数组,其中所有单词都由空格分隔,因此您可以将第一个对象作为名字,将其余对象作为中间/最后/等
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
可能有更简单的方法可以做到这一点,但这是一种方法..
希望对你有帮助
丹尼尔
【解决方案3】:
我认为下面的这个例子可以解决你的问题。
请记住,您可以直接从数组中分配值,而无需转换为字符串。
这是一个例子:
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];
}
}
【解决方案4】:
我发现这是最强大的:
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:@" "];
鲍勃是你的叔叔。