Iphone迭代NSString的子字符串
我希望在NSString中找到所有出现的子字符串,并逐一迭代以对该NSString进行一些更改。我该怎么做呢?怎么样Iphone迭代NSString的子字符串,iphone,nsstring,Iphone,Nsstring,我希望在NSString中找到所有出现的子字符串,并逐一迭代以对该NSString进行一些更改。我该怎么做呢?怎么样 // find first occurrence of search string in source string NSRange range = [sourceString rangeOfString:@"searchString"]; while(range.location != NSNotFound) { // build a new string with y
// 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)];
}
或者只是
[sourceString stringByReplacingOccurrencesOfString:searchString withString:targetString];
如果您想将searchString更改为源字符串中所有位置的相同值。我会选择以下内容:
// 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);
你可能想看看 查找字符和子字符串
– rangeOfCharacterFromSet:
– rangeOfCharacterFromSet:options:
– rangeOfCharacterFromSet:options:range:
– rangeOfString:
– rangeOfString:options:
– rangeOfString:options:range:
– rangeOfString:options:range:locale:
– enumerateLinesUsingBlock:
– enumerateSubstringsInRange:options:usingBlock:
– componentsSeparatedByString:
– componentsSeparatedByCharactersInSet:
– stringByTrimmingCharactersInSet:
– substringFromIndex:
– substringWithRange:
– substringToIndex:
分割字符串
– rangeOfCharacterFromSet:
– rangeOfCharacterFromSet:options:
– rangeOfCharacterFromSet:options:range:
– rangeOfString:
– rangeOfString:options:
– rangeOfString:options:range:
– rangeOfString:options:range:locale:
– enumerateLinesUsingBlock:
– enumerateSubstringsInRange:options:usingBlock:
– componentsSeparatedByString:
– componentsSeparatedByCharactersInSet:
– stringByTrimmingCharactersInSet:
– substringFromIndex:
– substringWithRange:
– substringToIndex:
如果要进行更改,可以使用:
-(NSString*)stringByReplacingOccurrencesOfString:(NSString*)目标与string:(NSString*)替换
但如果这不符合您的需要,请尝试以下方法:
-(void)EnumerateStringsRange:(NSRange)范围选项:(NSStringEnumerationOptions)使用block选择:(void(^)(NSString*substring,NSRange substringRange,NSRange enclosuringRange,BOOL*stop))block
在@TheEye上展开,我做了以下准备:
@interface NSString (EnumerateOccurancesOfString)
- (void)enumerateOccurancesOfString:(NSString *)string usingBlock:(void (^)(NSRange substringRange, BOOL *stop))block;
@end
-
你的意思是如果你有
@“abcabc”
你想迭代所有@“abc”
s吗?还可以使用:NSArray*stringArray=[myString componentsSeparatedByString:@“mySubString”];我按错了键,我的答案一开始是不完整的:-)由分离的组件发送。。。删除搜索字符串的所有匹配项,而不进行迭代…请参阅HelmiB所述的文档。这很复杂,有一种方法:-(void)EnumerateSubstringsRange:(NSRange)范围选项:(NSStringEnumerationOptions)opts usingBlock:(void(^)(NSString*substring,NSRange substringRange,NSRange ENCOLLINGRANGE,BOOL*stop))块
。在搜索了很多之后非常有用。谢谢。+1Matt的方法允许您更改字符串,因为它没有被枚举。