———————————————————————————————————————————
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;

}

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

Objective-C 【NSString-字符串比较&前后缀检查及搜索】的更多相关文章

  1. poj 2752 求一个字符串所有的相同前后缀

    求一个字符串所有的相同前后缀Sample Input ababcababababcababaaaaaSample Output 2 4 9 181 2 3 4 5 #include <iostr ...

  2. iOS - OC NSString 字符串

    前言 @interface NSString : NSObject <NSCopying, NSMutableCopying, NSSecureCoding> @interface NSM ...

  3. NSString 字符串

    0.字符串常用操作 自动补充方法:当字符串长度不够需要自动补充到一定的位数 OC字符串与C语言字符串之间的相互转换 1.不可变字符串的创建 // 直接创建不可变字符串 /* 在 OC 中,使用 @&q ...

  4. NSString 字符串操作

    //一.NSString /*----------------创建字符串的方法----------------*/ //1.创建常量字符串. NSString *astring = @"Th ...

  5. NSString字符串

    要把 “2011-11-29” 改写成 “2011/11/29”一开始想用ios的时间格式,后来用NSString的方法搞定. [string stringByReplacingOccurrences ...

  6. poj 2752 Seek the Name, Seek the Fame【KMP算法分析记录】【求前后缀相同的子串的长度】

    Seek the Name, Seek the Fame Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14106   Ac ...

  7. [LeetCode] Prefix and Suffix Search 前后缀搜索

    Given many words, words[i] has weight i. Design a class WordFilter that supports one function, WordF ...

  8. Hibernate给表和字段设置前后缀及分隔符

    在<一口一口吃掉Hibernate(一)--使用SchemaExport生成数据表>中介绍了如何生成数据表.但是这只是最基本的.hibernate在生成或者操作数据库时,会受一些限制.比如 ...

  9. HDU 2594(求最长公共前后缀 kmp)

    题意是在所给的两个字符串中找最长的公共前后缀,即第一个字符串前缀和第二个字符串后缀的最长相等串. 思路是将两个字符串拼接在一起,然后直接套用 kmp 算法即可. 要注意用 next 会报编译错误,改成 ...

随机推荐

  1. Windows内存管理和linux内存管理

    windows内存管理 windows 内存管理方式主要分为:页式管理,段式管理,段页式管理. 页式管理的基本原理是将各进程的虚拟空间划分为若干个长度相等的页:页式管理把内存空间按照页的大小划分成片或 ...

  2. Java再学习——sleep(), wait(), notify(), notifyAll()

    首先一点就是Thread.sleep(long millis)方法是Thread类的静态方法,其他三个wait(), notify()和notifyAll()都是Object类的方法. sleep(l ...

  3. LeetCode50 Pow(x, n)

    题目: Implement pow(x, n). (Medium) 分析: 实现库函数求幂运算,遍历一遍是超时的,用快速幂,就是分治的思想,每次把n去掉一半. 注意:n的取值范围,n = MIN_IN ...

  4. iOS block进行页面之间传值

    #import <UIKit/UIKit.h> @interface FirstViewController : UIViewController @property (weak, non ...

  5. 【Android 界面效果12】EditText中的多行输入问题

    ------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 我们在使用EditText进行多行输入的时候,通常的写法如下: <EditText android ...

  6. emoji表情符处理替换成空格

    /**    * 用filterOffUtf8Mb4    * Description: 过滤率四个字节的utf-8字符(emoji表情符),替换成四个空格.    *         四字节utf- ...

  7. Java Script基础(二) 基本语法

    一.变量的声明和使用 JavaScript是一种弱类型的语言,没有明确的数据类型,在声明变量时,不需要指定变量的类型,变量的类型由赋给变量的值决定. 变量声明的语法: var 变量名; 示例: var ...

  8. java多线程之Future和FutureTask

    Executor框架使用Runnable 作为其基本的任务表示形式.Runnable是一种有局限性的抽象,然后可以写入日志,或者共享的数据结构,但是他不能返回一个值. 许多任务实际上都是存在延迟计算的 ...

  9. Simofox 2.7 - 基于 pcxFirefox 定制(停更)

    ••• 现已停止更新,无良作者转战 Google Chrome ••• 项目名称:Simofox (Simple + Cool + Firefox) 项目介绍:Simofox 中译名西蒙狐,目前项目版 ...

  10. 递归小Demo

    public class demo5 { public static void main(String[] args) {        //初始值为100         int n = 100;  ...