Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone迭代NSString的子字符串_Iphone_Nsstring - Fatal编程技术网

Iphone迭代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

我希望在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 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的方法允许您更改字符串,因为它没有被枚举。