【问题标题】: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:@" "];
          

          鲍勃是你的叔叔。

          【讨论】:

            猜你喜欢
            • 2011-11-24
            • 2018-01-09
            • 1970-01-01
            • 1970-01-01
            • 2012-01-08
            • 2023-02-21
            • 2013-04-19
            • 2017-09-03
            相关资源
            最近更新 更多