0

我有一个NSString. 这NSString被分成不同的部分";"

我将其拆分NSString为 2 个子字符串(带有[componentsSeparatedByString:@";"]

现在,我有一个子字符串,其中[componentsSeparatedByString:@";"], NSArray。在这个子字符串中,我有(有时但不总是!) a ","

当我有一个时,","我想将我的子字符串溢出到两个“子子字符串”中并使用这两个子子字符串......

我怎样才能做到这一点 ?

感谢您的回答。

编辑 :

嗨@Alladinian,感谢您的回答。这是我需要的循环,我想。我想使用 QRCode 将新联系人添加到 iPhone 通讯录(名字和姓氏)。

我的NSString样子:

NSString *_name = [NSString stringWithFormat:@"%@", code.contact];

我的子字符串看起来像:

NSArray *subStrings = [code.contact componentsSeparatedByString:@";"];

在我的NSString中,我有(也许但不总是)","我需要两个不同的输出:一个用于名字,一个用于姓氏。

我知道如何添加名字和姓氏,","但如果我只有名字,我不知道该怎么做。只有一个名字使我的应用程序崩溃...

现在,为了解决问题,我在拳头名称字段中发送拳头名称和姓氏......但这对我来说并不完美。

4

1 回答 1

1

好的,这是您可以使用的一些代码。您不能只使用componentsSeparatedByString名​​称,因为有 4 种情况:

  • 没有逗号:假设只是名字“first”
  • 逗号,但没有姓氏“,第一”
  • 逗号,但没有名字“last,”
  • 逗号,两者:“最后,第一个”

代码:

NSString * mecardString = ...your string...

if ( [ mecardString hasPrefix:@"MECARD:" ] ) // is it really a card string? (starts with 'MECARD:')
{
    mecardString = [ mecardString substringFromIndex:[ @"MECARD:" length ] ] ;  // remove MECARD: from start

    NSString * firstName = nil ;
    NSString * lastName = nil ;

    NSArray * components = [ mecardString componentsSeparatedByString:@";" ] ;
    for( NSString * component in components ) // process all parts of MECARD string
    {
        NSString * lcString = [ component lowercaseString ] ;
        if ( [ lcString hasPrefix:@"n:" ] )
        {
            // handle name ("N:")
            NSRange commaRange = [ lcString rangeOfString:@"," ] ;
            if ( commaRange.location == NSNotFound )
            {
                firstName = lcString ;
            }
            else
            {
                firstName = [ lcString substringFromIndex:NSMaxRange( commaRange  ) ] ;
                lastName = [ lcString substringToIndex:commaRange.location ] ;
            }

            NSCharacterSet * whitespaceCharSet = [ NSCharacterSet whitespaceAndNewlineCharacterSet ] ;
            firstName = [ firstName stringByTrimmingCharactersInSet:whitespaceCharSet ] ;
            lastName = [ firstName stringByTrimmingCharactersInSet:whitespaceCharSet ] ;
        }
        else if  ( lcString hasPrefix:@"sound:" )
        {
            // handle name ("SOUND:")
        }
            // ... write code handle other parts of MECARD... (NICKNAME, BDAY, URL, etc)
        else
        {
            // handle unknown case here
        }
    }

    // you have names here
}
于 2013-06-06T18:41:15.800 回答