zoukankan      html  css  js  c++  java
  • Objective-C 【NSString-字符串比较&前后缀检查及搜索】

    ———————————————————————————————————————————
    NSString 字符串比较

    #import <Foundation/Foundation.h>

    void test1()
    {
        //        比较字符串大小
        //        首先我们定义两个字符串
        NSString *str1=@"abc";
        NSString *str2=@"Acd";
        
        //        我们要用到的是compare这个比较字符串的方法(这是一个对象方法,由字符串实例对象调用,比较字符串时精确到每个字符。注:比较的是ASCII值)
        NSComparisonResult result1=[str1 compare:str2];
        //        我们目前对这个方法不是太理解,我们不知道这个方法返回值是什么类型,调用了也没法判断两个字符串谁大谁小。那么我们就点进去看看底层是什么东西
        
        //        - (NSComparisonResult)compare:(NSString *)string;  在底层中我们看到了这个,显然,返回值是NSComparisonResult类型的
        
        //        然后我们再点进去这个类型,我们发现:
        //        typedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending};
        
        //        其实NSComparisonResult这个类型是一个枚举类型,且返回值有三种:NSOrderedAscending(升序)、NSOrderedSame(相等)、NSOrderedDescending(降序)
        //        我来解读一下这三种返回类型:
        //        ①NSOrderedAscending:升序,也就是前面的小,后面的大
        //        ②NSOrderedSame:相等,也就是两个字符串相等
        //        ③NSOrderedDescending:降序,也就是前面的大,后面的小
        
        //        了解清楚compare这个方法后,我们就可以接着判断了:
        switch (result1) {
            case NSOrderedAscending:
                NSLog(@"str1<str2");
                break;
            case NSOrderedDescending:
                NSLog(@"str1>str2");
                break;
            case NSOrderedSame:
                NSLog(@"str1==str2");
                break;
                
            default:
                break;
        }

    }

    void test2()
    {
        //        比较字符串大小的时候加上限定条件(比如说不区分大小写啦)
        NSString *str3=@"abc";
        NSString *str4=@"ABC";
        
        NSComparisonResult result2=[str3 compare:str4 options:NSCaseInsensitiveSearch];
        
        switch (result2) {
            case NSOrderedAscending:
                NSLog(@"str1<str2");
                break;
            case NSOrderedDescending:
                NSLog(@"str1>str2");
                break;
            case NSOrderedSame:
                NSLog(@"str1==str2");
                break;
                
            default:
                break;
        }
        
        //        NSCaseInsensitiveSearch  不区分大小写比较
        //        NSLiteralSearch  进行完全比较(默认属性)
        //        还有很多比较时可加的属性,自行可添加
    }

    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            
    //        比较两个字符串是否相等
    //        我们比较两个字符串是否相等时,不可以用if(str1==str2) ,这样是完全错误的,我们要用另外一个方法 isEqualToString
            NSString *str5=@"abc";
            NSString *str6=@"abc";
            
    //        isEqualToString的返回值是BOOL类型,返回1就相等,返回0就不相等
            if ([str5 isEqualToString:str6]) {
                NSLog(@"相等");
            }
            else
            {
                NSLog(@"不相等");
            }
        }
        return 0;
    }


    ———————————————————————————————————————————
    NSString 的前后缀检查及搜索

    #import <Foundation/Foundation.h>

    void test1()
    {
    //    检查字符串前后缀是否正确
        
        //        检查前缀是否满足条件  hasPrefix
        NSString *str1=@"https://saaddaddfgga";
        
        if ([str1 hasPrefix:@"http://"]||[str1 hasPrefix:@"https://"]) {
            NSLog(@"符合前缀");
        }
        else
        {
            NSLog(@"不符合");
        }
        
        
        //        检查后缀是否满足条件  hasSuffix
        NSString *str2=@"asfa.jp1g";
        
        //        我们可以对多个后缀进行判断,看给定字符串是否符合(当然前缀也可以同时判定多个)
        if ([str2 hasSuffix:@".jpg"]||[str2 hasSuffix:@".avi"]||[str2 hasSuffix:@".gif"]) {
            NSLog(@"符合后缀");
        }
        else
        {
            NSLog(@"不符合");
        }
    }

    void test2()
    {
        //        正序查找
        //        查找 一小段字符串 在 字符串str2 中的位置(并输出 子字符串 在 str2 中的位置及其长度)
        //        注:这里其实就是寻找一个  字符串  的  子字符串
        
        NSString *str2=@"啦4234324啦啦王中尧啦1231122342啦啦啦";
        
        NSRange qqqq=[str2 rangeOfString:@"王中尧"];//声明枚举类型的实例对象不用加 * ,如果加了 * ,就成这个对象的地址了,显然就不对了。
        //        - (NSRange)rangeOfString:(NSString *)aString;
        //        我们在注释中可以知道 rangeOfString 这个方法的返回值是 NSRange
        
        //        而 NSRange 是什么呢?
        
        //        typedef struct _NSRange {
        //            NSUInteger location;
        //            NSUInteger length;
        //        } NSRange;
        
        //        显然这是一个枚举类型,返回值是 该子字符串  在 字符串str2 中的 位置 和 自身长度
        
        // rangeOfString 作用是查找子字符串itcast在 str中第一次出现的位置
        // 如果找能够查找到字符串,则返回子字符串的位置信息
        // 如果查找不到,则返回的Range的
        //                          位置 是一个特别大得数
        //                          length 0
        NSLog(@"位置为:%ld ,长度为:%ld",qqqq.location,qqqq.length);
    }

    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            
    //        我们在搜索的时候,常用到NSNotFound来判定是否查找到该字符串
    //        NSNotFound是一个 #define NSIntegerMax    LONG_MAX  (也就是无符号的长整型)
    //        这相当于系统规定的一个瓶颈,一旦超过这个界限,就会报错
            NSString *str=@"fafaffaitcawwwstsdfasffa";
            
            NSRange qq=[str rangeOfString:@"itcast"];
            
            if (qq.location!=NSNotFound) {//这里其实就是如果 子字符串 在 该字符串 中的位置不是无限大,那么肯定就对了,如果无限大,肯定就跑到外面去了,就找不到了~
                NSLog(@"查找成功");
            }
            else
            {
                NSLog(@"wrong!");
            }
        }
        return 0;

    }


    ———————————————————————————————————————————

  • 相关阅读:
    java实现快速排序
    java实现简单回文算法
    HTML条件注释
    LeetCode 将有序数组转换为二叉搜索树
    LeetCode 有效的数独
    Leetcode 买卖股票的最佳时机 II
    模拟登陆163邮箱
    oracle 视图的相关操作
    oracle 约束类别
    软件测试用例知识点梳理
  • 原文地址:https://www.cnblogs.com/wzy294250051/p/4798525.html
Copyright © 2011-2022 走看看