Si je veux obtenir une valeur de la NSString @"value:hello World:value"
, que dois-je utiliser?
La valeur de retour je veux, c'est @"hello World"
.
Si je veux obtenir une valeur de la NSString @"value:hello World:value"
, que dois-je utiliser?
La valeur de retour je veux, c'est @"hello World"
.
Option 1:
NSString *haystack = @"value:hello World:value";
NSString *prefix = @"value:"; // string prefix, not needle prefix!
NSString *suffix = @":value"; // string suffix, not needle suffix!
NSRange needleRange = NSMakeRange(prefix.length,
haystack.length - prefix.length - suffix.length);
NSString *needle = [haystack substringWithRange:needleRange];
NSLog(@"needle: %@", needle); // -> "hello World"
Option 2:
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=value:).+?(?=:value)" options:0 error:nil];
NSRange needleRange = [regex rangeOfFirstMatchInString:haystack options:NSMatchingAnchored range:NSMakeRange(0, haystack.length)];
NSString *needle = [haystack substringWithRange:needleRange];
Celui-ci pourrait être un peu plus haut pour votre trivial cas bien.
Option 3:
NSString *needle = [haystack componentsSeparatedByString:@":"][1];
Celle-ci crée trois chaînes temporaires et un tableau tandis que le fractionnement.
Tous les extraits de supposer que ce qui est recherché est en fait contenue dans la chaîne.
Voici une fonction simple qui permet de faire ce que vous cherchez:
- (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];
}
Utilisation:
NSString *myName = [self getSubstring:@"This is my :name:, woo!!" betweenString:@":"];
Voici une petite combinaison de @Regexident l'Option 1 et @Garett réponses, pour obtenir une puissante chaîne de coupe entre un préfixe et le suffixe, avec PLUS de...ANDMORE mots sur elle.
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);
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.