Tôi muốn tìm tất cả các lần xuất hiện của chuỗi con trong một NSString và lặp lại từng chuỗi một để thực hiện một số thay đổi đối với NSString đó. Tôi nên làm như thế nào?Iphone lặp qua chuỗi xuất hiện của NSString
Trả lời
Làm thế nào về
// 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)];
}
Hoặc chỉ cần
[sourceString stringByReplacingOccurrencesOfString:searchString withString:targetString];
nếu bạn muốn thay đổi searchString để cùng giá trị ở khắp mọi nơi trong chuỗi nguồn.
Cũng sử dụng: NSArray * stringArray = [myString componentsSeparatedByString: @ "mySubString"]; –
Tôi khai thác sai phím và câu trả lời của tôi đã được gửi không đầy đủ lúc đầu :-) – TheEye
Bằng các thành phầnĐược loại bỏ ... bạn xóa tất cả các lần xuất hiện của chuỗi tìm kiếm, bạn không lặp lại chúng ... – TheEye
tôi sẽ đi với một cái gì đó như thế này:
// 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);
đó là cách phức tạp, có một phương pháp cho rằng: '- (void) enumerateSubstringsInRange: (NSRange) phạm vi tùy chọn: (NSStringEnumerationOptions) opts usingBlock: (void (^) (NSString * substring, NSRange substringRange, NSRange enclosingRange, BOOL * stop)) block'. – calimarkus
Đó là một điểm rất tốt. 1 trên câu trả lời của bạn cho điều đó. – mattjgalloway
Rất hữu ích sau khi tìm kiếm rất nhiều. Cảm ơn. +1 –
Bạn có thể muốn có một cái nhìn vào NSString class Documentation.
Nhân vật Tìm và chuỗi con
– rangeOfCharacterFromSet:
– rangeOfCharacterFromSet:options:
– rangeOfCharacterFromSet:options:range:
– rangeOfString:
– rangeOfString:options:
– rangeOfString:options:range:
– rangeOfString:options:range:locale:
– enumerateLinesUsingBlock:
– enumerateSubstringsInRange:options:usingBlock:
Chia Strings
– componentsSeparatedByString:
– componentsSeparatedByCharactersInSet:
– stringByTrimmingCharactersInSet:
– substringFromIndex:
– substringWithRange:
– substringToIndex:
Nếu bạn muốn làm thay đổi, bạn có thể sử dụng:
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement
nhưng nếu điều đó không phù hợp với nhu cầu của bạn thử điều này:
- (void)enumerateSubstringsInRange:(NSRange)range options:(NSStringEnumerationOptions)opts usingBlock:(void (^)(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop))block
Xem tài liệu, như được ghi nhận bởi HelmiB. – calimarkus
Mở rộng trên @ TheEye của answer, tôi nấu này lên:
@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. Thay thế các lần xuất hiện của NSString - iPhone
- 2. Chuỗi không có [NSString stringWithFormat:] xuất hiện dưới dạng "(null)"
- 3. Cách thay thế các lần xuất hiện của nhiều chuỗi bằng nhiều chuỗi khác [NSString]
- 4. Số lần xuất hiện của một ký tự trong NSString
- 5. IOS: NSString truy xuất chuỗi con từ chuỗi
- 6. Kiểm tra chuỗi con của lỗi NSString
- 7. Làm cách nào để tìm thấy lần xuất hiện cuối cùng của chuỗi con trong một NSString?
- 8. iPhone giả không thấy loại NSString tôi
- 9. Vị trí của chuỗi con trong NSString
- 10. lặp qua các đường dây của một chuỗi
- 11. iPhone chuyển đổi NSString để NSURL lỗi
- 12. Khi phát hành một NSString trong iPhone
- 13. chuỗi dài nhất xuất hiện n lần
- 14. Lặp lại qua mảng chuỗi trong Java
- 15. Cách tạo chữ cái đầu tiên của NSString Capital trong iPhone dev
- 16. Lặp lại qua chuỗi char bằng char
- 17. Mã thông báo thiết bị iPhone - NSData hoặc NSString
- 18. Lấy chỉ mục của lần xuất hiện thứ n của một chuỗi?
- 19. Một lớp lót để đếm số lần xuất hiện của chuỗi trong một chuỗi [] trong Java?
- 20. Lặp qua các ký tự trong một chuỗi trong VB.NET
- 21. Xóa tất cả các lần xuất hiện của chuỗi trong một chuỗi từ danh sách python
- 22. Thay thế một lần xuất hiện chuỗi Obj-c
- 23. Mã hóa AES cho một NSString trên iPhone
- 24. Phát hiện lặp lại trong chuỗi
- 25. Phát hiện màu sắc của iPhone/iPod
- 26. iPhone loại bỏ chuỗi con từ chuỗi
- 27. Cách nhanh nhất để tìm tất cả các lần xuất hiện của chuỗi con là gì?
- 28. NSRegularExpressions mục tiêu-C, tìm sự xuất hiện đầu tiên của các số trong một chuỗi
- 29. Tạo NSString bằng cách lặp lại một chuỗi khác với số lần nhất định
- 30. Sự xuất hiện chuỗi phụ trong một chuỗi
Bạn có nghĩa là nếu bạn có '@" abcabcabcabcabcabc "' bạn muốn lặp qua tất cả '@" abc "' s? – mattjgalloway
vâng, đúng vậy. –