黑马程序员——OC语言日志——NSString字符串的比较函数

本文介绍了Objective-C中NSString对象的比较方法,包括compare的基本用法、比较选项如NSCaseInsensitiveSearch和NSNumericSearch,以及如何忽略大小写进行字符串比较。同时,文章还澄清了使用'=='进行字符串等价性判断的常见误区,推荐使用isEqualToString:方法来判断字符串是否相等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1、比较字符串大小

字符串根据排列顺序的不同,会有大小的差异,如果我们要比较两个字符的大小的话,可以使用compare的方法。

compare方法返回的解惑有三种:
NSOrderedAscending,NSOrderenSame,NSOraereDescending
str>str2   NSOraereDescending      1
st<str2    NSOrderedAscending       -1
str=str2   NSOrderenSame                0

使用compare的方法比较字符串大小:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str1 = @"caa";
         NSString *str2 = @"Caa";
        //取出没个字符的ASCII码值,比较ASCII值大小
        //compare比较字符串,默认区分大小写
       
        NSComparisonResult result = [str1 compare:str2];
        switch (result) {
            case NSOrderedAscending:   //值为-1
                NSLog(@"NSOrderedAscending=result=%ld str1<str2 升序",result);
                break;
            case NSOrderedDescending://值为1
                NSLog(@"NSOrderedDescending=result=%ld str1>str2 降序",result);
                break;
            case NSOrderedSame://值为0
                NSLog(@"NSOrderedSame=result=%ld str1=str2 相等",result);
                break;
                
            default:
                break;
        }
        
    }
    return 0;
}
结果打印:NSOrderedDescending=result=1 str1>str2 降序

这种比较字符串的方法是区分大小写的,c的ASCII码大于C的ASCII码值。

2、通过指定条件比较字符串大小

在使用compare方法的时候可以添加参数来决定是否区分大小写,或者声明为比较字符串个数而不是字符值等比较条件。常见的有三个:

NSCaseInsensitiveSearch:不区分大小写字符。
NSLiteralSearch:进行完全比较,区分大小写。
NSNumericSearch:比较字符串的字符个数,而不是字符值。

如果要忽略大小写的话,可以在option里面加一个参数NSCaseInsensitiveSearch具体如下:

/******加条件**********/

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str1 = @"caa";
         NSString *str2 = @"Caa";
        //取出没个字符的ASCII码值,比较ASCII值大小
        //compare比较字符串添加NSCaseInsensitiveSearch条件
        //不区分大小写
       
        NSComparisonResult result = [str1 compare:str2 options:NSCaseInsensitiveSearch];
        switch (result) {
            case NSOrderedAscending:   //值为-1
                NSLog(@"NSOrderedAscending=result=%ld str1<str2 升序",result);
                break;
            case NSOrderedDescending://值为1
                NSLog(@"NSOrderedDescending=result=%ld str1>str2 降序",result);
                break;
            case NSOrderedSame://值为0
                NSLog(@"NSOrderedSame=result=%ld str1=str2 相等",result);
                break;
                
            default:
                break;
        }
        
    }
    return 0;
}
打印结果:NSOrderedSame=result=0 str1=str2 相等

而且也可以使用“|”增加多个条件,如增加字符串中字符个数的比较:

NSString *str1 = @"caa";
         NSString *str2 = @"Caaa";
        NSComparisonResult result = [str1 compare:str2 options:NSCaseInsensitiveSearch|NSNumericSearch];//再或上一个NSNumericSearch条件,比较个数

3、判断字符是否相等

判断字符串是否相等,传统意义上的比较是用“==”,如:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str1 = @"caa";
        NSString *str2 = [NSString stringWithFormat:@"caa"];
        if(str1==str2)//使用“==”判断,其实判断的是指针指向的地址大小
        {
            NSLog(@"相等");
            
        }
        else{
            NSLog(@"不相等");
        }
     
    }
    return 0;
}
打印结果为:不相等

这中比较方式不正确,因为str1和str2都是指针变量,二者相比,比较的是指针变量内存储的值的大小,即字符地址的大小,两组字符串值虽然一样,但是存储地址不一样,所以不能用“==”进行比较,那么我们可以使用另一个函数进行比较:isEqualToString:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str1 = @"caa";
        NSString *str2 = [NSString stringWithFormat:@"caa"];
       
        if([str1 isEqualToString:str2])//比较的是字符串值
        {
            NSLog(@"相等");
            
       }
        else
        {
            NSLog(@"不相等");
        }
      
    }
    return 0;
}

打印:相等

isEqualToString:比较的才是字符串的值的大小。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值