Si je veux obtenir une valeur de NSString @"value:hello World:value"
, que dois-je utiliser?
La valeur de retour que je veux est @"hello World"
.
Option 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"
Option 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];
Celui-ci pourrait être un peu excessif pour votre cas plutôt trivial cependant.
Option 3:
NSString *needle = [haystack componentsSeparatedByString:@":"][1];
Celui-ci crée trois chaînes temporaires et un tableau lors du fractionnement.
Tous les extraits supposent que ce qui est recherché est réellement contenu dans la chaîne.
Voici une réponse un peu moins compliquée:
NSString *myString = @"abcdefg";
NSString *mySmallerString = [myString substringToIndex:4];
Voir aussi substringWithRange et substringFromIndex
Voici une fonction simple qui vous 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];
}
Usage:
NSString *myName = [self getSubstring:@"This is my :name:, woo!!" betweenString:@":"];
Voici une petite combinaison des réponses @Regexident Option 1 et @Garett, pour obtenir un coupe-fil puissant entre un préfixe et un suffixe, avec des mots MORE ... ANDMORE.
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);
Utilisez ceci aussi
NSString *ChkStr = [MyString substringWithRange:NSMakeRange(5, 26)];
Remarque - Votre NSMakeRange(start, end)
doit être NSMakeRange(start, end- start)
;