iOS-NSString和NSMutableString用法大全

释放双眼,带上耳机,听听看~!
// 创建NSString的常用方法
+ (void)NSStringCreateMethod
{
    // 字符串常量 类似于 char *p = "Hello world";
    // NSString的对象,里面的内容(字符串)一旦创建,就不能再被改变。
    // string,是一个指向对象的指针,在OC/IOS里,操作对象,就是指向对象的指针。(string,就是对象),对象自己拥有很多的成员方法调用。每一个NSString的对象,都有这些方法。
    // p是一个指向C字符串的指针(C数组),C库提供了很多的字符串相关的函数,这些函数并不属于任何一个C字符串。
    NSString *string = @"Hello world";
    // 用%@,来打印对象
    NSLog(@"string = %@",string);
    
    // 用一个string对象的内容(字符串),来初始化string1。
    NSString *string1 = [[NSString alloc] initWithString:string];
    NSLog(@"string1 = %@",string1);
    // 用一个string对象的内容,来创建string2; initWithString:对应的加方法。
    // 注意:每一个initWithXxxx常对应一个aaaaWithXxxx
    NSString *string2 = [NSString stringWithString:string];
    NSLog(@"string2 = %@",string2);
 
    // 用一个C字符串采用UTF8编码格式,来初始化string3。
    NSString *string3 = [[NSString alloc] initWithUTF8String:"Hello world"];
    NSLog(@"string3 = %@",string3);
    // 对应的加方法,用一个C字符串,来创建string4
    NSString *string4 = [NSString stringWithUTF8String:"Hello world"];
    NSLog(@"string4 = %@",string4);
 
    // 用一个C字符串,使用NSUTF8StringEncoding(就是UTF8编码),来初始化string5。相当于initWithUTF8String:
    NSString *string5 = [[NSString alloc] initWithCString:"Hello world" encoding:NSUTF8StringEncoding];
    NSLog(@"string5 = %@",string5);
    // 对应的加方法
    NSString *string6 = [NSString stringWithCString:"Hello world" encoding:NSUTF8StringEncoding];
    NSLog(@"string6 = %@",string6);
 
    // NSLog(NSString *format, ...);
    // printf(const char *restrict, ...);
    // sprintf(char *restrict, const char *restrict, ...);
    // 用一个格式化的内容,来初始化string7,类似sprintf
    NSString *string7 = [[NSString alloc] initWithFormat:@"Hello world %@ %d %s %.2f OK",string, 18, "good", 3.14];
    NSLog(@"Hello world %@ %d %s %.2f OK",string, 18, "good", 3.14);
    NSLog(@"string7 = %@",string7);
    // 对应的加方法
    NSString *string8 = [NSString stringWithFormat:@"%d %c",1024,'X'];
    NSLog(@"string8 = %@",string8);
}
 
/*
 + (id)stringWithString:(NSString *)string
 {
    return [[NSString alloc] initWithString:string];
 }
 */
 
+ (void)NSStringSimpleMethod
{
    NSString *string = @"Hello world";
    // 获取字符串对象的长度(这个对象里保存的字符串的长度)
    NSLog(@"%lu",[string length]);
    // OC字符串的长度,指的是OC字符串里,元素的个数。
    NSString *string1 = @"不作死,就不会死";
    // NSString *string1 = [NSString stringWithUTF8String:"不作死,就不会死"];
    NSLog(@"%lu",[string1 length]);
    
    // 获取OC字符串里,对应索引(下标)的元素。
    // OC数组里,保存的实际上并不是C的字符串,而是unichar的数组。unsigned short,一个元素占两个字节。'l':006C, '死': 6b7b
    // OC的数组里,就不是C字符串,所以,就不需要有尾0.
    unichar c = [string characterAtIndex:2];
    // unichar 我们用%C来打印
    NSLog(@"c = %C",c);
    c = [string1 characterAtIndex:2];
    NSLog(@"c = %C,%x",c,c);
    
    // __NSCFConstantString __NSCFString
    // 看到崩溃日志,characterAtIndex:崩溃调用的类是如上两个,实际有多个。说明了,NSString,是由类簇来实现的,像由类簇实现的类,我们不能去继承。
    // 获取下标为8的元素,会崩溃,因为OC数组每个元素都是unichar格式的,不需要有尾0
    // [string1 characterAtIndex:8];
    // [string1 characterAtIndex:[string1 length]];
    // 注意,上面的方法不用get,因为get在OC/IOS的方法命名里尤其特殊的用法
    unichar buf[10] = {0};
    // get在OC/IOS命名里面的用法如下,不是通过返回值返回,而是通过函数的参数返回内容,用get这个单词。
    // 将一个range范围的内容,返回到buf里面去(不要越界)。
    [string1 getCharacters:buf range:NSMakeRange(2, 6)];
    for (int i=0; buf[i]!=0; i++) {
        NSLog(@"buf[%d] = %C",i,buf[i]);
    }
    
    // 返回一个所有字符都大写的新的字符串对象
    // NSString这个字符串对象,一旦创建,就无法改变其内容了。
    // 因此这个方法,并不是将string的所有字符大写,而是创建一个所有字符多大写的新的对象,返回。
    NSString *string2 = [string uppercaseString];
    NSLog(@"string = %@",string);
    NSLog(@"string2 = %@",string2);
    // 返回一个所有字符都小写的新的字符串对象
    NSString *string3 = [string2 lowercaseString];
    NSLog(@"string3 = %@",string3);
    // 返回一个所有单词首字符大写,其他字符都小写的新的字符串对象
    NSString *string4 = [@"helloworld,abc doyou do" capitalizedString];
    NSLog(@"string4 = %@",string4);
 
    // 返回从index下标开始,一直到结束的子串(新的字符串对象)。
    // 注意,它包含index下标的字符
    NSString *string5 = [string4 substringFromIndex:[@"hello" length]];
    NSLog(@"string5 = %@",string5);
    // 返回从头开始,到index下标结束的子串(新的字符串对象)。
    // 注意,它不包含index下标的字符
    NSString *string6 = [string4 substringToIndex:5];
    NSLog(@"string6 = %@",string6);
    // 返回一个从下标为3开始,长度为4的子串(新的字符串对象)。
    NSString *string7 = [string4 substringWithRange:NSMakeRange(3, 4)];
    NSLog(@"string7 = %@",string7);
    
    // 返回string4对应的"world"字符串的范围,如果找到了,返回的是对应的下标和长度,找不到返回NSNotFound
    NSRange range = [string4 rangeOfString:@"world"];
    // 将一个range,转换成一个NSString的对象。
    NSLog(@"range = %@",NSStringFromRange(range));
    
    range = [string4 rangeOfString:@"world"];
    // 如果range.location等于NSNotFound,则表示没有找到
    // NSNotFound 是long的最大值
    if (range.location != NSNotFound) {
        NSLog(@"找到了,range = %@",NSStringFromRange(range));
    } else {
        NSLog(@"没找到,range = %@",NSStringFromRange(range));
    }
    
    // string是一个指针,保存一个字符串对象的地址而已。
    // 不能变的是string指针指向的NSString类型的对象的内容不能变。
    string = @"http://192.168.88.8";
    NSLog(@"string = %@",string);
    
    // 判断string字符串,是否以@"http"开头,是返回YES(1),否则返回NO(0)
    if ([string hasPrefix:@"http"]) {
        NSLog(@"这是一个网址!");
    }
    // 判断@"北京.mp3"字符串,是否以@"mp3"结尾,是返回YES(1),否则返回NO(0)
    if ([@"北京.mp3" hasSuffix:@"mp3"]) {
        NSLog(@"这是一个音乐!");
    }
    
    // 将一个字符串对象转换为一个整数/浮点数...
    NSLog(@"%d",[@"  -123abc" intValue]);
    NSLog(@"%.2f",[@" 3.14abc" floatValue]);
}
 
+ (void)NSStringCompareMethod
{
    NSString *string = @"Hello world";
    NSString *string1 = @"hello world";
    // is, has 开头,一般返回的BOOL
    // 比较string和string1两个字符串的内容是否相等。
    if ([string isEqualToString:@"Hello world"]) {
        NSLog(@"相等");
    }
    
    /* compare: 返回值是一个枚举类型,有如下三个枚举
     NSOrderedAscending = -1L,  升序
     NSOrderedSame,             同序
     NSOrderedDescending        降序
     返回值从string,到string1,是一个什么增长顺序
     */
    if ([string compare:string1] == NSOrderedAscending) {
        NSLog(@"升序!");
    }
    if ([@"abc" compare:@"ABC"] == NSOrderedDescending) {
        NSLog(@"降序!");
    }
    
    // 不区分大小写比较
    if ([string caseInsensitiveCompare:string1] == NSOrderedSame) {
        NSLog(@"不区分大小写,他们相等!");
    }
    
    // 比较string和string1,带比较的参数。
    // 如果options的值为NSCaseInsensitiveSearch,就等价于caseInsensitiveCompare: 这个方法
    if ([string compare:string1 options:NSCaseInsensitiveSearch] == NSOrderedSame) {
        NSLog(@"不区分大小写,他们相等!");
    }
    
    if ([@"hello123.txt" compare:@"hello5.txt"] == NSOrderedAscending) {
        NSLog(@"升序");
    }
    
    // 将字符串里的数字字符,当做一个数值去比较 (123>5)
    if ([@"hello123.txt" compare:@"hello5.txt" options:NSNumericSearch] == NSOrderedDescending) {
        NSLog(@"降序");
    }
    
    // 比较这两个字符串,既不区分大小写,又降数字字符当做整数去比较。
    if ([@"HELLO123.txt" compare:@"hello5.txt" options:NSCaseInsensitiveSearch|NSNumericSearch] == NSOrderedDescending) {
        NSLog(@"确实是降序!");
    }
}
/*
 - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask
{
    switch (mask)
    {
        case NSCaseInsensitiveSearch:  0000 0001
            xxxx;
            break;
        case ....:
            ...
            break;
        case NSNumericSearch:          0100 0000
            yyyy;
            break;
        case NSCaseInsensitiveSearch|NSNumericSearch:
                                       0100 0001
            zzzz;
            brea;
    }
    return ...
}
 */
 
// NSString这个类实例的字符串对象,一旦初始化完成,就不能再改变了。 NSMutableString它是可以改变的。
// @interface NSMutableString : NSString NSMutableString是继承与NSString的,说明,NSString里的方法,NSMutableString都可以用。
+ (void)NSMutableStringCreateMethod
{
    NSString *string = @"Hello world";
    // 用string的内容,来初始化一个可变的string1字符串。
    // 这个方法,我们也常说成是,将一个不可变字符串,转成可变字符串。(实际上是创建了一个新的可变字符串对象,只不过里面的内容,是原来的内容)
    NSMutableString *string1 = [[NSMutableString alloc] initWithString:string];
    NSLog(@"string1 = %@",string1);
    // 用对应的加方法 (注意,参数是NSString类型,但我们传了一个NSMutableString的对象)
    // 父类的指针,可以指向子类的对象,被称为赋值兼容原则。
    // 这样的赋值是安全的。
    // 但反过来,是不允许的,这样的赋值是不安全的。
    NSMutableString *string2 = [[NSMutableString alloc] initWithString:string1];
    NSLog(@"string2 = %@",string2);
    
    // 我们从来不再NSString用这俩方法,但NSMutableString就可以用了。
    // 创建了两个字符串对象,但字符串对象里的内容为空。
    // NSString *string3 = [[NSString alloc] init];
    // NSString *string4 = [NSString string];
    // 注意,和NSString *string5 = nil; 是不一样的。
    
    // 创建一个空的可变字符串
    NSMutableString *string3 = [[NSMutableString alloc] init];
    // 判断字符串内容为空的方法
    if ([string3 length] == 0) {
        NSLog(@"字符串的内容为空");
    }
    NSMutableString *string4 = [NSMutableString string];
    // 另外一种判断字符串内容为空的方法
    if ([string4 isEqualToString:@""]) {
        NSLog(@"字符串的内容为空");
    }
    
    // NSMutableString 自己的创建字符串的方法
    // 创建一个预设字符串长度为10的可变字符串对象,注意,此时字符串的内容为空。
    // 如果说,我们创建的字符串对象,能提前确认他的元素的话,我们习惯用initWithCapacity:方法,来预设一个长度。这样的话,效率更高一些。
    NSMutableString *string5 = [[NSMutableString alloc] initWithCapacity:10];
    NSLog(@"%lu",[string5 length]);
    // 对应的加方法
    NSMutableString *string6 = [NSMutableString stringWithCapacity:10];
    NSLog(@"%lu",[string6 length]);
}
 
+ (void)NSMutableStringSimpleMethod
{
    // 对于可变字符串来说,他的方法就是,增加,删除,修改,插入。
    NSMutableString *string = [[NSMutableString alloc] init];
    // 追加 (在string的尾部,追加一个字符串的内容)
    [string appendString:@"Hello"];
    NSLog(@"string = %@",string);
    // 在string的尾部,追加一个格式化的字符串内容。
    [string appendFormat:@"%cworld %d",' ',100];
    NSLog(@"string = %@",string);
    
    // 插入
    // 将@"are"字符串,插入到下标为5的位置
    [string insertString:@"are" atIndex:5];
    NSLog(@"string = %@",string);
    // 将@"Good"字符串,插入到最前面。
    [string insertString:@"Good" atIndex:0];
    NSLog(@"string = %@",string);
    // 可以进行尾插,相当于追加字符串。 (但不能没有节操)
    [string insertString:@"Bye" atIndex:[string length]];
    NSLog(@"string = %@",string);
    
    // 替换
    // 将Hello开始,到100结束的内容,替换成空格
    // GoodHelloare world 100Bye
    // NSRange range = [string rangeOfString:@"Helloare world 100"];
    // [string replaceCharactersInRange:range withString:@" "];
    NSRange range1 = [string rangeOfString:@"Hello"];
    NSRange range2 = [string rangeOfString:@"100"];
    NSRange range = NSMakeRange(range1.location, range2.location+range2.length-range1.location);
    [string replaceCharactersInRange:range withString:@" "];
    NSLog(@"替换string = %@",string);
    
    // 删除
    range = [string rangeOfString:@" "];
    // 删除一个range区域的内容
    [string deleteCharactersInRange:range];
    NSLog(@"string = %@",string);
 
    // 重设字符串的内容,用一个字符串的内容,重设string里的内容。
    [string setString:@"Hello world"];
    // 注意,不等价于string = @"Hello world";
    NSLog(@"string = %@",string);
}

 

人已赞赏
iOS文章

OSAtomic原子操作

2019-10-29 11:41:06

iOS文章

iOS 关于集成友盟统计SDK 与 AlipaySDK UTDID库 发生冲突的解决办法

2019-10-29 12:40:13

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索