Chciałbym znaleźć wszystkie wystąpienia podciągu w NSString i iterować jeden po drugim, aby dokonać pewnych zmian w tym NSString. Jak mam to zrobić?Iphone iterować po wystąpieniach podciągów NSString
Odpowiedz
Jak o
// 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)];
}
Albo po prostu
[sourceString stringByReplacingOccurrencesOfString:searchString withString:targetString];
jeśli chcesz zmienić searchString na tę samą wartość wszędzie w ciągu źródłowego.
Również używając: NSArray * stringArray = [myString componentsSeparatedByString: @ "mySubString"]; –
Stuknęłam w niewłaściwy klucz i moja odpowiedź została początkowo przesłana jako niekompletna :-) – TheEye
Według składnikówSeparated ... usuwasz wszystkie wystąpienia szukanego ciągu, nie robisz ich iteracji ... – TheEye
pójdę z czymś takim:
// 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);
To droga do komplikacji, jest w tym celu: '- (void) enumerateSubstringsInRange: (NSRange) opcje zasięgu: (NSStringEnumerationOptions) używa blokadyBlock: (void (^) (podciąg NSString *, podłańcuch NSRange, zmiana w NSRange, blok BOOL *)) block'. – calimarkus
To jest bardzo dobry punkt. +1 na twoją odpowiedź na to. – mattjgalloway
Bardzo pomocna po wielu poszukiwaniach. Dzięki. +1 –
Czasami warto spojrzeć na NSString class Documentation.
Znalezienie Znaki i Podciągi
– rangeOfCharacterFromSet:
– rangeOfCharacterFromSet:options:
– rangeOfCharacterFromSet:options:range:
– rangeOfString:
– rangeOfString:options:
– rangeOfString:options:range:
– rangeOfString:options:range:locale:
– enumerateLinesUsingBlock:
– enumerateSubstringsInRange:options:usingBlock:
Dzielenie ciągi
– componentsSeparatedByString:
– componentsSeparatedByCharactersInSet:
– stringByTrimmingCharactersInSet:
– substringFromIndex:
– substringWithRange:
– substringToIndex:
Jeśli chcesz dokonać zmian, można użyć:
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement
ale jeśli to nie pasuje do Twoich potrzeb spróbuj tego:
- (void)enumerateSubstringsInRange:(NSRange)range options:(NSStringEnumerationOptions)opts usingBlock:(void (^)(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop))block
Zobacz dokumentację, jak zauważyła HelmiB. – calimarkus
Rozszerzając @ TheEye na answer, I gotowane to up:
@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. Zamień wystąpienia NSString - iPhone
- 2. Kiedy wydać NSString na iPhone
- 3. iPhone SDK NSString do NSDate
- 4. Python iterować po słowniku
- 5. Token urządzenia iPhone - NSData lub NSString
- 6. jak iterować zagnieżdżone słowniki w celu-c iphone sdk
- 7. regex - Jak dopasować podciąg po X wystąpieniach wzorca?
- 8. iPhone symulator nie widzi mojej kategorii NSString
- 9. Jak przekonwertować NSMutableData na NSString na iPhone?
- 10. iPad/iPhone - NSString drawInRect nie pakuje słów
- 11. znajdź zakres podciągów ciągu znaków
- 12. Znajdowanie podciągów w python
- 13. Podsumowanie podciągów doładowania dopasowanie
- 14. Generowanie podciągów w clojure
- 15. Znajdź podciągów w PyMongo
- 16. Jak iterować po tablicy z tablicami
- 17. Jak iterować po tablicy tablic znaków wc?
- 18. Jak iterować po zakresie kluczy w słowniku?
- 19. Czy mogę iterować po .NET4 MemoryCache?
- 20. Numpy jak iterować po kolumnach tablicy?
- 21. Jak iterować po linii cin po linii w C++?
- 22. Sprawdzanie pola we wszystkich wystąpieniach zrzutów pamięci
- 23. Generowanie kombinacji podciągów z ciągu
- 24. Generowanie pary kluczy na iPhone i drukuj zalogować jako NSString
- 25. jak dodać złączyć wiele NSString w jeden ciąg w iPhone
- 26. Konwersja NSString na niepodpisany znak * dla aplikacji iphone
- 27. NSString w UIWebview
- 28. Jak uzyskać listę raportów dostępnych w wystąpieniach usług raportowania
- 29. Jak iterować w MultiKeyMap?
- 30. Jak mogę iterować po słowniku Pythona uporządkowanym według wartości?
Czy znaczy jeśli masz '@" abcabcabcabcabcabc "' chcesz iterować nad wszystkimi '@" abc "' s? – mattjgalloway
tak, to wszystko. –