iOS-OC-NSString和NSMutableString用法大全

来源:互联网 发布:英雄岛全套源码下载 编辑:程序博客网 时间:2024/04/29 18:49
// 创建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);}

0 0
原创粉丝点击