2009-02-27 15 views

Odpowiedz

207

Możesz również podzielić ciąg znaków na podłańcuch, używając metody NString: componentsSeparatedByString.

Przykład z dokumentacją:

NSString *list = @"Norman, Stanley, Fletcher"; 
NSArray *listItems = [list componentsSeparatedByString:@", "]; 
+0

Czy mogę podzielić ciągi znaków, których oddzielne znaki są różne? na przykład @ "A, B^C ~ D" –

+6

Powinieneś być w stanie użyć "componentsSeparatedByCharactersInSet:" NSString do podziału na wiele znaków. – codelogic

+0

Świetny człowiek pracy ..! dzięki –

37

NSString ma kilka metod to:

[myString substringToIndex:index]; 
[myString substringFromIndex:index]; 
[myString substringWithRange:range]; 

Sprawdź w dokumentacji NSString aby uzyskać więcej informacji.

0

pisałem trochę sposób, aby podzielić ciągi w określonej ilości części. Należy pamiętać, że obsługuje on tylko pojedyncze znaki separatora. Ale myślę, że jest to skuteczny sposób podziału NSString.

//split string into given number of parts 
-(NSArray*)splitString:(NSString*)string withDelimiter:(NSString*)delimiter inParts:(int)parts{ 
    NSMutableArray* array = [NSMutableArray array]; 

    NSUInteger len = [string length]; 
    unichar buffer[len+1]; 

    //put separator in buffer 
    unichar separator[1]; 
    [delimiter getCharacters:separator range:NSMakeRange(0, 1)]; 

    [string getCharacters:buffer range:NSMakeRange(0, len)]; 

    int startPosition = 0; 
    int length = 0; 
    for(int i = 0; i < len; i++) { 

     //if array is parts-1 and the character was found add it to array 
     if (buffer[i]==separator[0] && array.count < parts-1) { 
      if (length>0) { 
       [array addObject:[string substringWithRange:NSMakeRange(startPosition, length)]]; 

      } 

      startPosition += length+1; 
      length = 0; 

      if (array.count >= parts-1) { 
       break; 
      } 

     }else{ 
      length++; 
     } 

    } 

    //add the last part of the string to the array 
    [array addObject:[string substringFromIndex:startPosition]]; 

    return array; 
}