Pregunta ¿Cómo obtener una subcadena de NSString?


Si quiero obtener un valor de NSString @"value:hello World:value", ¿qué debería usar?

El valor de retorno que quiero es @"hello World".


73
2018-04-15 11:37


origen


Respuestas:


Opción 1:

NSString *haystack = @"value:hello World:value";
NSString *haystackPrefix = @"value:";
NSString *haystackSuffix = @":value";
NSRange needleRange = NSMakeRange(haystackPrefix.length,
                                  haystack.length - haystackPrefix.length - haystackSuffix.length);
NSString *needle = [haystack substringWithRange:needleRange];
NSLog(@"needle: %@", needle); // -> "hello World"

Opcion 2:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^value:(.+?):value$" options:0 error:nil];
NSTextCheckingResult *match = [regex firstMatchInString:haystack options:NSAnchoredSearch range:NSMakeRange(0, haystack.length)];
NSRange needleRange = [match rangeAtIndex: 1];
NSString *needle = [haystack substringWithRange:needleRange];

Sin embargo, este podría ser un poco exagerado para su caso bastante trivial.

Opción 3:

NSString *needle = [haystack componentsSeparatedByString:@":"][1];

Éste crea tres cadenas temporales y una matriz durante la división.


Todos los fragmentos suponen que lo que se busca en realidad está contenido en la cadena.


149
2018-04-15 11:39



Aquí hay una respuesta un poco menos complicada:

NSString *myString = @"abcdefg";
NSString *mySmallerString = [myString substringToIndex:4];

Ver también substringWithRange y substringFromIndex


65
2018-04-27 15:22



Aquí hay una función simple que te permite hacer lo que estás buscando:

- (NSString *)getSubstring:(NSString *)value betweenString:(NSString *)separator
{
    NSRange firstInstance = [value rangeOfString:separator];
    NSRange secondInstance = [[value substringFromIndex:firstInstance.location + firstInstance.length] rangeOfString:separator];
    NSRange finalRange = NSMakeRange(firstInstance.location + separator.length, secondInstance.location);

    return [value substringWithRange:finalRange];
}

Uso:

NSString *myName = [self getSubstring:@"This is my :name:, woo!!" betweenString:@":"];

16
2017-10-01 18:15



Aquí hay una pequeña combinación de respuestas de @Regexident Opción 1 y @Garett, para obtener un poderoso cortador de cuerdas entre un prefijo y sufijo, con MÁS ... Y MÁS palabras en él.

NSString *haystack = @"MOREvalue:hello World:valueANDMORE";
NSString *prefix = @"value:";
NSString *suffix = @":value";
NSRange prefixRange = [haystack rangeOfString:prefix];
NSRange suffixRange = [[haystack substringFromIndex:prefixRange.location+prefixRange.length] rangeOfString:suffix];
NSRange needleRange = NSMakeRange(prefixRange.location+prefix.length, suffixRange.location);
NSString *needle = [haystack substringWithRange:needleRange];
NSLog(@"needle: %@", needle);

12
2017-07-07 18:41



Use esto también

NSString *ChkStr = [MyString substringWithRange:NSMakeRange(5, 26)];

Nota: su NSMakeRange(start, end) debiera ser NSMakeRange(start, end- start);


12
2018-06-01 04:37