首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >具有(‘)字符问题的过滤数组的NSPredicate

具有(‘)字符问题的过滤数组的NSPredicate
EN

Stack Overflow用户
提问于 2016-05-19 10:42:47
回答 4查看 1.3K关注 0票数 0

下面是我用字符串过滤数组的测试。如果我的字符串不包含(')字符,它工作得很好。

代码语言:javascript
代码运行次数:0
运行
复制
    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Nick", @"b'en", @"Adam", @"Melissa", @"arbind", nil];

    //NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'b'"]; -> it work
    NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'b''"]; -> it crash
    NSArray *beginWithB = [array filteredArrayUsingPredicate:sPredicate];
    NSLog(@"beginwithB = %@",beginWithB);

我也尝试将我的字符串更改为'b\'''b''',但它仍然崩溃。

这是崩溃日志

由于未命名的异常'NSInvalidArgumentException‘终止应用程序,原因:’无法解析格式字符串“自包含‘b’

如何解决这个问题?任何帮助都将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-05-19 10:54:32

请按以下方式筛选结果:

代码语言:javascript
代码运行次数:0
运行
复制
    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Nick", @"b'en", @"Adam", @"Melissa", @"arbind", nil];
        NSString *strToBeSearched = @"b'";

        //NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'b'"]; -> it work

        NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",strToBeSearched]; //-> it also work

        //OR

        NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'b\\''"];


        NSArray *beginWithB = [array filteredArrayUsingPredicate:sPredicate];
        NSLog(@"containB = %@",beginWithB);
票数 2
EN

Stack Overflow用户

发布于 2016-05-19 10:52:32

尝尝这个

代码语言:javascript
代码运行次数:0
运行
复制
NSString *searchword = @"b";
NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",searchword];

你得到的输出

票数 2
EN

Stack Overflow用户

发布于 2016-05-19 10:57:56

当你尝试反斜杠的时候,你离得很近。这是NSPredicate用来转义特殊字符的字符。但是,您需要两个反斜杠,而不是一个反斜杠:

代码语言:javascript
代码运行次数:0
运行
复制
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Nick", @"b'en", @"Adam", @"Melissa", @"arbind", nil];
NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'b\\''"];
//                                                                              ^^
NSArray *beginWithB = [array filteredArrayUsingPredicate:sPredicate];
NSLog(@"beginwithB = %@",beginWithB);

你需要两个的原因是目标-C编译器。它处理代码中的所有字符串文字,并替换它遇到的转义序列。如果希望NSPredicate看到单个反斜杠,则字符串文本需要有两个反斜杠,因为反斜杠本身在Objective字符串文本中被编码为\\

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37320857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档