objective-c cocoa-touch nsstring

objective c - ¿Cómo obtener una subcadena de NSString?



objective-c cocoa-touch (5)

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

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


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:@":"];


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);


Aquí hay una respuesta un poco menos complicada:

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

Ver también substringWithRange y substringFromIndex


Use esto también

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

Nota: Su NSMakeRange(start, end) debe ser NSMakeRange(start, end- start) ;


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.