【IOS 开发学习总结-OC-25】★★★objective-c——foundation 框架之字符串

字符串

objective-c 有2个字符串,NSString (字符序列不可变)和NSMuttableString(字符序列可变);

创建字符串

NSString大致的功能如下:
1. 创建字符串:——既可以使用 init 方法,也可以使用 string 开头的类方法,也可以使用以@开头的直接量。
2. 读取文件或网络 URL 来初始化字符串。
3. 将字符串出内容写入文件或 URL.
4. 获取字符串长度——获取指定位置的字符胡哦哦这指定范围的字符
5. 获取字符串出对应的 C 风格字符串
6. 连接或者分隔字符串
7. 查找字符串中指定的字符和子串。
8. 替换字符串
9. 比较字符串
10. 字符串比较大小
11. 对字符串中的字符进行大小写转换

示例代码:

#import <Foundation/Foundation.h>

int main(int argc , char * argv[])
{
    @autoreleasepool{
        unichar data[6] = {97 , 98 , 99 , 100 , 101, 102};
        // 使用Unicode数值数组初始化字符串
        NSString* str = [[NSString alloc]
            initWithCharacters: data length:6];
        NSLog(@"%@" , str);
        char* cstr = "Hello, iOS!";
        // 将C风格的字符串转换为NSString对象
        NSString* str2 = [NSString stringWithUTF8String:cstr];
        NSLog(@"%@" , str2);
        // 将字符串写入指定文件 
        [str2 writeToFile:@"myFile.txt"
            atomically:YES 
            encoding:NSUTF8StringEncoding
            error:nil];
        // 读取文件内容,用文件内容初始化字符串
        NSString* str3 = [NSString stringWithContentsOfFile:@"NSStringTest.m"
            encoding:NSUTF8StringEncoding 
            error:nil];
        NSLog(@"%@" , str3);
    }
}

NSString的常用功能

示例程序(NSString类的用法):

#import <Foundation/Foundation.h>

int main(int argc , char * argv[])
{
    @autoreleasepool{
        NSString* str = @"Hello";
        NSString* book = @"《疯狂iOS讲义》";
        // 在str后面追加固定的字符串
        // 原来字符串对象并不改变,只是将新生成的字符串重新赋给str指针变量
        str = [str stringByAppendingString:@",iOS!"];
        NSLog(@"%@" , str);
        // 获取字符串对应的C风格字符串
        const char* cstr = [str UTF8String];
        NSLog(@"获取的C字符串:%s" , cstr);
        // 在str后面追加带变量的字符串。
        // 原来字符串对象并不改变,只是将新生成的字符串重新赋给str指针变量
        str = [str stringByAppendingFormat:@"%@是一本非常不错的图书.", book];
        NSLog(@"%@" , str);
        NSLog(@"str的字符个数为:%lu" , [str length]);
        NSLog(@"str按UTF-8字符集解码后字节数为:%lu" , [str             lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
        // 获取str的前10个字符组成的字符串
        NSString* s1 = [str substringToIndex:10];
        NSLog(@"%@" , s1);
        // 获取str的从第5个字符开始,与后面字符组成的字符串
        NSString* s2 = [str substringFromIndex:5];
        NSLog(@"%@" , s2);  
        // 获取str从第5个字符开始,到第15个字符组成的字符串
        NSString* s3 = [str substringWithRange:NSMakeRange(5, 15)];
        NSLog(@"%@" , s3);
        // 获取iOS在str中出现位置
        NSRange pos = [str rangeOfString:@"iOS"];
        NSLog(@"iOS在str中出现的开始位置:%ld, 长度为:%ld"
            , pos.location , pos.length);
        // 将str的所有字符转为大写
        str = [str uppercaseString];
        NSLog(@"%@" , str);
    }
}

编译运行结果:

2015-09-30 22:32:54.625 923[1596:54255] Hello,iOS!
2015-09-30 22:32:54.643 923[1596:54255] 获取的C字符串:Hello,iOS!
2015-09-30 22:32:54.643 923[1596:54255] Hello,iOS!《疯狂iOS讲义》是一本非常不错的图书.
2015-09-30 22:32:54.644 923[1596:54255] str的字符个数为:30
2015-09-30 22:32:54.644 923[1596:54255] str按UTF-8字符集解码后字节数为:62
2015-09-30 22:32:54.645 923[1596:54255] Hello,iOS!
2015-09-30 22:32:54.645 923[1596:54255] ,iOS!《疯狂iOS讲义》是一本非常不错的图书.
2015-09-30 22:32:54.646 923[1596:54255] ,iOS!《疯狂iOS讲义》是
2015-09-30 22:32:54.646 923[1596:54255] iOS在str中出现的开始位置:6, 长度为:3
2015-09-30 22:32:54.647 923[1596:54255] HELLO,IOS!《疯狂IOS讲义》是一本非常不错的图书.

说明:上面的NSRange并不是一个类,而是一个结构体。包括了 location 和 length 2个unsigned int 整型值,分别代表起始位置和长度。OC 还提供了,NSMakeRange()函数来创建 NSRange 变量。

可变字符串

NSMutableString是NSString的子类。——NSString的方法,NSMutableString都可以用。NSMutableString也可以直接当成 NSString 对象使用。
改变NSMutableString字符串序列的字符串代码:

#import <Foundation/Foundation.h>

int main(int argc , char * argv[])
{
    @autoreleasepool{
        NSString* book = @"《疯狂iOS讲义》";
        // 创建一个NSMutableString对象
        NSMutableString* str = [NSMutableString 
            stringWithString:@"Hello"];
        // 追加固定字符串
        // 字符串所包含的字符序列本身发生了改变,因此无需重新赋值
        [str appendString:@",iOS!"];
        NSLog(@"%@" , str);
        // 追加带变量的字符串
        // 字符串所包含的字符序列本身发生了改变,因此无需重新赋值
        [str appendFormat:@"%@是一本非常不错的图书." , book];
        NSLog(@"%@" , str);
        // 在指定位置插入字符串
        // 字符串所包含的字符序列本身发生了改变,因此无需重新赋值
        [str insertString:@"fkit.org" atIndex:6];
        NSLog(@"%@" , str);
        // 删除从位置6到位置12的所有字符
        [str deleteCharactersInRange:NSMakeRange(6, 12)];
        NSLog(@"%@" , str);
        // 将从位置6到位置9的字符串替换成Objective-C
        [str replaceCharactersInRange:NSMakeRange(6, 9)
            withString:@"Objetive-C"];
        NSLog(@"%@" , str);
    }
}

编译运行结果:

2015-09-30 22:38:36.837 923[1630:57721] Hello,iOS!
2015-09-30 22:38:36.841 923[1630:57721] Hello,iOS!《疯狂iOS讲义》是一本非常不错的图书.
2015-09-30 22:38:36.841 923[1630:57721] Hello,fkit.orgiOS!《疯狂iOS讲义》是一本非常不错的图书.
2015-09-30 22:38:36.841 923[1630:57721] Hello,《疯狂iOS讲义》是一本非常不错的图书.
2015-09-30 22:38:36.842 923[1630:57721] Hello,Objetive-C是一本非常不错的图书.