Vorrei trovare tutte le occorrenze di una sottostringa in una NSString e iterare una alla volta per apportare alcune modifiche a tale NSString. Come dovrei farlo?Iphone itera su sottorubriche occorrenze di una NSString
risposta
Come su
// find first occurrence of search string in source string
NSRange range = [sourceString rangeOfString:@"searchString"];
while(range.location != NSNotFound)
{
// build a new string with your changed values
range = [sourceString rangeOfString:@"searchString" options:0 range:NSMakeRange(range.location + 1, [sourceString length] - range.location - 1)];
}
O semplicemente
[sourceString stringByReplacingOccurrencesOfString:searchString withString:targetString];
se si desidera modificare il searchString sullo stesso valore ovunque nella stringa di origine.
Uso anche: NSArray * stringArray = [componenti myStringSeparatedByString: @ "mySubString"]; –
Ho toccato la chiave sbagliata e la mia risposta è stata inizialmente inviata incompleta :-) – TheEye
Per componenti Separati ... rimuovi tutte le occorrenze della tua stringa di ricerca, non le esegui iterate ... – TheEye
Vorrei andare con qualcosa di simile:
// Setup what you're searching and what you want to find
NSString *string = @"abcabcabcabc";
NSString *toFind = @"abc";
// Initialise the searching range to the whole string
NSRange searchRange = NSMakeRange(0, [string length]);
do {
// Search for next occurrence
NSRange range = [string rangeOfString:toFind options:0 range:searchRange];
if (range.location != NSNotFound) {
// If found, range contains the range of the current iteration
// NOW DO SOMETHING WITH THE STRING/RANGE
// Reset search range for next attempt to start after the current found range
searchRange.location = range.location + range.length;
searchRange.length = [string length] - searchRange.location;
} else {
// If we didn't find it, we have no more occurrences
break;
}
} while (1);
è complicato, c'è un metodo per quello: '- (void) enumerateSubstringsInRange: (NSRange) opzioni di intervallo: (NSStringEnumerationOptions) opts usingBlock: (void (^) (NSString * sottostringa, NSRange substringRange, NSRange enclosingRange, BOOL * stop)) block'. – calimarkus
Questo è un ottimo punto. +1 sulla tua risposta per questo. – mattjgalloway
Molto utile dopo aver cercato molto. Grazie. +1 –
si potrebbe desiderare di avere uno sguardo su NSString class Documentation.
Trovare caratteri e sottostringhe
– rangeOfCharacterFromSet:
– rangeOfCharacterFromSet:options:
– rangeOfCharacterFromSet:options:range:
– rangeOfString:
– rangeOfString:options:
– rangeOfString:options:range:
– rangeOfString:options:range:locale:
– enumerateLinesUsingBlock:
– enumerateSubstringsInRange:options:usingBlock:
Divisione stringhe
– componentsSeparatedByString:
– componentsSeparatedByCharactersInSet:
– stringByTrimmingCharactersInSet:
– substringFromIndex:
– substringWithRange:
– substringToIndex:
Se si vuole fare le modifiche, è possibile utilizzare:
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement
ma se che non si adatta alle tue esigenze provare questo:
- (void)enumerateSubstringsInRange:(NSRange)range options:(NSStringEnumerationOptions)opts usingBlock:(void (^)(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop))block
Vedere la documentazione, come rilevato da HelmiB. – calimarkus
Ampliando @ theEYE di answer, ho cucinato questo in su:
@interface NSString (EnumerateOccurancesOfString)
- (void)enumerateOccurancesOfString:(NSString *)string usingBlock:(void (^)(NSRange substringRange, BOOL *stop))block;
@end
-
@implementation NSString (EnumerateOccurancesOfString)
- (void)enumerateOccurancesOfString:(NSString *)string usingBlock:(void (^)(NSRange range, BOOL * _Nonnull stop))block {
NSParameterAssert(block);
NSRange range = [self localizedStandardRangeOfString:string];
if (range.location == NSNotFound) return;
// Iterate all occurances of 'string'
while (range.location != NSNotFound)
{
BOOL stop = NO;
block(range, &stop);
if (stop) {
break;
}
// Continue the iteration
NSRange nextRange = NSMakeRange(range.location + 1, self.length - range.location - 1);
range = [self rangeOfString:string options:(NSStringCompareOptions)0 range:nextRange locale:[NSLocale currentLocale]]; // Will this sometimes conflict with the initial range obtained with -localizedStandardRangeOfString:?
}
}
@end
- 1. Sostituisci occorrenze di NSString - iPhone
- 2. Crittografia AES per una NSString su iPhone
- 3. itera su proprietà di una classe php
- 4. Rileva caratteri Unicode in NSString su iPhone
- 5. Come convertire NSMutableData in NSString su iPhone?
- 6. Numero di occorrenze di un carattere in NSString
- 7. iPhone SDK NSString a NSDate
- 8. iPhone convertire NSString all'errore NSURL
- 9. occorrenze contare su una gamma utilizzando MATLAB
- 10. itera su un oggetto recuperato da _.groupBy
- 11. come aggiungere concatenate NSString multiplo in una stringa in iphone
- 12. Informazioni su initWithBytes per una NSString
- 13. Dichiarare una NSString su più righe
- 14. iPad/iPhone - NSString drawInRect non word wrapping
- 15. FindElement non itera quando itera elementi in IReadOnlyCollection
- 16. Come convertire NSString in CGPoint in iPhone
- 17. Token dispositivo Iphone - NSData o NSString
- 18. Dati sensibili: NSString VS NSMutableString (iPhone)
- 19. Objective C Convert int a NSString (iPhone)
- 20. quando rilasciare un NSString in iPhone
- 21. Eliminazione di parole da una NSString
- 22. Come aggiungere una NSString a un'altra NSString
- 23. Conversione di una NSString di dati JSON su NSArray
- 24. itera su un array di oggetti in giada/pugjs
- 25. Genera coppia di chiavi su iPhone e di stampa per accedere come NSString
- 26. Come codificare l'URL su NSString
- 27. NSData crittografato su NSString in obj-c?
- 28. lua: itera su tutte le coppie nella tabella
- 29. Perl itera in ogni corrispondenza
- 30. stringWithFormat vs. initWithFormat su NSString
Do you significa che se tu avessi '@" abcabcabcabcabcabc "' vuoi iterare su tutti i '@" abc "' s? – mattjgalloway
sì, è così. –