Iphone 在一个字符串中搜索多个字符串

Iphone 在一个字符串中搜索多个字符串,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,如何在字符串中搜索特定子字符串并找到每个匹配项的位置 比如说, NSString *theText = @"name - dave, age - 30, favNum - 7, name - peter, age - 8, favNum - 10"; 在这个例子中,我试图找到所有的年龄,并用50岁来代替。这样做的最佳方式是什么?您必须拆解字符串,然后重新构建它。无法替换NSString中的字符 首先,需要将字符串拆分为多个组件。使用NSString的-(NSArray*)组件按字符串(@“ag

如何在字符串中搜索特定子字符串并找到每个匹配项的位置

比如说,

NSString *theText = @"name - dave, age - 30, favNum - 7, name - peter, age - 8, favNum - 10";

在这个例子中,我试图找到所有的年龄,并用50岁来代替。这样做的最佳方式是什么?

您必须拆解字符串,然后重新构建它。无法替换NSString中的字符

首先,需要将字符串拆分为多个组件。使用NSString的
-(NSArray*)组件按字符串(@“age”)
操作,或者可以使用
-(NSArray*)组件按字符串(@“,”)
操作来显示记录。但是要想得到数字还需要更多的工作。使用NSScanner

使用要扫描的字符串创建NSScanner:
+(id)scannerWithString:(NSString*)aString
。因此,您将遍历上面返回的数组,然后扫描一个字符串,再扫描一个整数

要覆盖字符串,需要使用-(BOOL)scanCharactersFromSet:(NSCharacterSet)scanSet intoString:(NSString*)stringValue 使用字符集:[[NSCharacterSet decimalDigitCharacterSet]inverseCharacterSet]-这是包含除数字以外的所有字符的字符集。请注意,scanCharacters from range会返回它扫描的字符,因此您可以使用它来重建字符串

然后,您可以使用NSScanner的
-(BOOL)scanInt:(int*)intValue扫描一个整数


使用NSPredicate和regexps可能会实现类似的效果-代码会更少,但可读性会更低。

NSRegularExpression
仅在iOS 4.0之后才可用,并且字符串应该具有可预测的regex,以便按照人们的猜测工作

NSString *theText = @"name - dave, age - 30, favNum - 7, name - peter, age - 8, favNum - 10";
NSRegularExpression * regularExpression = [NSRegularExpression regularExpressionWithPattern:@"(?<= age - )\\d+"
                                                                                    options:0
                                                                                      error:nil];
    
NSString * alteredText = [regularExpression stringByReplacingMatchesInString:theText
                                                                     options:0
                                                                       range:NSMakeRange(0, [theText length])
                                                                withTemplate:@"50"];

NSLog(@"%@", alteredText);

你为什么拿着这个当绳子?你不能把它们转换成字典吗?这不是他问的吗:-)嗨,那只是一个例子。在代码中,我从rss提要中提取数据,因此我有一个HTML字符串,然后在UIWebView中显示。问题是HTML中的一些图像需要调整大小,所以我试图在HTML字符串中找到图像的高度和宽度,并调整它们的大小。iPhone还是Mac?添加该标记会有所帮助。为此,还有一种非常有用的方法可以存储我正在更改的原始值吗?就像将所有年龄值存储到数组中一样。您可以查看
枚举匹配安装:选项:范围:使用
NSRegularExpression的block:
方法。添加了一个示例。您将获得一组
NSNumber
s。您好,非常感谢。我摸了摸脑袋,才发现了enumarateMatchesInString。
NSMutableArray * ages = [NSMutableArray array];
[regularExpression enumerateMatchesInString:theText
                                    options:0
                                      range:NSMakeRange(0, [theText length])
                                 usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop){
                                     [ages addObject:[NSNumber numberWithInt:[[theText substringWithRange:result.range] intValue]]];
                                 }];

NSLog(@"%@", ages);