2013-06-06 2 views
0

나는 NSString을가집니다. 이 NSString";"으로 다른 부분으로 나뉩니다. 두 하위 문자열에서 하위 문자열을 나누는 방법 Xcode

은 내가 NSArray에, [componentsSeparatedByString:@";"]로, 내가 문자열을 가지고, 이제 ( [componentsSeparatedByString:@";"] 포함)이 문자열

NSString을 분할합니다. 이 하위 문자열에는 "," (가끔은 항상 그런 것은 아닙니다!)이 있습니다.

내가 ... 내가 원하는 "," 두 "하위 문자열"내 문자열을 유출이 두 개의 하위 subtrings를 사용해야 할 때

내가 어떻게 할 수 있습니까?

답장을 보내 주셔서 감사합니다.

편집 :

안녕 @Alladinian, UR 답변에 대한 감사합니다. 그건 내가 필요한 루프 야. QRCode로 iPhone 주소록 (이름 및 성)에 새 연락처를 추가하고 싶습니다. "," 나는 다른이 필요 내 NSString에서

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

, 나는 (항상 아마도 아니지만)이 있습니다

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

내 문자열은 다음과 같습니다처럼

NSString 보인다 출력 : 이름과성에 하나씩.

나는 ","으로 구분 된 이름과 성을 추가하는 방법을 알고 있지만 이름이 하나만있는 경우 어떻게해야할지 모르겠다. 첫 번째 이름은 내 응용 프로그램을 충돌 시키십시오 ...

지금은 치마 문제로, 주먹 이름 필드에 주먹 이름과 성을 보냅니다 ...하지만 내 생각에는 완벽하지 않습니다.

+0

이러한 모든 부분 문자열을 의미있는 방식으로 저장하거나 필요시 루프를 처리해야합니까? 즉, 예상되는 결과는 어떻게 생겼을 까? – Alladinian

+0

아마도 샘플 입력을 보여주십시오. –

+0

안녕하세요, Alladibian, 안녕하세요, Martin R, 답변 해 주셔서 감사합니다. EDIT가 문제가됩니다. 도와 주셔서 감사합니다 ! – iNico3D

답변

1

다음은 사용할 수있는 코드입니다.

  • 없이 쉼표 : 당신은 단 4 경우가 있기 때문에 이름을 componentsSeparatedByString을 사용할 수 없습니다 "최초의"단지 이름
  • 쉼표 가정은,하지만 성 "최초의"
  • 쉼표, 하지만 이름없는 "마지막으로,"
  • 쉼표, 모두 "성, 이름"

코드 :

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 
} 
관련 문제