¿Cómo dividir cadenas en subcadenas en iOS?

83

Recibí un NSStringmensaje del servidor. Ahora quiero dividirlo en la subcadena que necesito. ¿Cómo dividir la cuerda?

Por ejemplo:

substring1: leer desde el segundo carácter al quinto carácter

substring2: lee 10 caracteres del sexto carácter.

Frío Zhong
fuente
1
Deberías cambiar de iPhone a iOS.
Ricardo

Respuestas:

223

También puede dividir una cadena por una subcadena, utilizando el método componentsSeparatedByString de NString .

Ejemplo de documentación:

NSString *list = @"Norman, Stanley, Fletcher";
NSArray *listItems = [list componentsSeparatedByString:@", "];
codelogic
fuente
¿Puedo dividir cadenas cuyas marcas separadas sean diferentes? por ejemplo, @ "A, B ^ C ~ D"
Chilly Zhong
8
Debería poder utilizar "componentsSeparatedByCharactersInSet:" de NSString para dividir en varios caracteres.
codelogic
hola separé con éxito la cadena pero quiero establecer eso separado en UILabel, ¿alguna idea?
Nikunj Jadav
Itere su matriz: for (int i = 0; i <[listItems count]; i ++) y use [listItems objectAtIndex: i];
Domness
¡Gracias! hago un poco diferente: `NSArray * listItems = [list componentsSeparatedByCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];`
insinuaciónreplay
39

NSString tiene algunos métodos para esto:

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

Consulte la documentación de NSString para obtener más información.

Joel Levin
fuente
1

Escribí un pequeño método para dividir cadenas en una cantidad específica de partes. Tenga en cuenta que solo admite caracteres separadores individuales. Pero creo que es una forma eficiente de dividir un 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;
}
ben
fuente