字符串常用函数

1、创建一个字符串对象:

NSString *str3 = [[NSString alloc] initWithString:@"A String!"];  [str3 release];
str3 = [NSString stringWithString:@"A String!"]; 
// 不需要管理内存,系统自带类用静态方法创建的对象系统自动释放内存。其中initWithString: 是直接赋值一个OC的字符串。 stringWithString:方法是initWithString:相应的静态方法;重新开内存并赋值。

NSString *str4= [[NSString alloc] initWithUTF8String:"A String!"];    [str4 release];
str4 = [NSString stringWithUTF8String:"A String!"];   
// 不需要管理内存,系统自带类用静态方法创建的对象系统自动释放内存。其中initWithUTF8String: 是把C语言中的字符串转换成OC形式并赋值。stringWithUTF8String:是initWithUTF8String: 相应的静态方法;重新开内存并赋值。

NSString *str5 = [[NSString alloc] initWithFormat:@"My age is %i and height is %.2f", 19, 1.55f];    
[str5 release];
str5 = [NSString stringWithFormat:@"My age is %i and height is %.2f", 19, 1.55f]; 
// 不需要管理内存,系统自带类用静态方法创建的对象系统自动释放内存。其中initWithFormat: 是按照某种格式赋值。stringWithFormat: 是initWithFormat: 相应的静态方法;重新开内存并赋值。

2、从文件中读取文本

NSString *path = @"/Users/apple/Desktop/test.txt";    //下面这个方法已经过期,不能解析中文
NSString*str1=[NSString stringWithContentsOfFile:path];
NSLog(@"%@", str1);
//stringWithContentsOfFile:该方法可以读取设定目录下的文件中的内容并形成字符串,可以输出显示。

// 定义一个NSError变量
NSError *error;
// 指定字符串编码为UTF-8: NSUTF8StringEncoding
NSString *str1 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
if (error == nil) { // 没有错误信息
    NSLog(@"读取文件成功:%@", str1);
} else {
    NSLog(@"读取文件失败:%@", error);
}
//stringWithContentsOfFile: 该方法以字符串编码为UTF-8格式读取设定目录下的文件中的内容并形成字符串;&error是如果以字符串编码为UTF-8格式读取成功则error为原始值nil,若不成功则给error赋值异常原因。

NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/test.txt"];
// file://固定格式,读取本地文件。
NSString *str2 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@", str2);
    
NSURL *url2 = [NSURL URLWithString:@"http://www.baidu.com"];
// http://固定格式,后面跟的是网址(其实就是文本)。
NSString *str3 = [NSString stringWithContentsOfURL:url2 encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@", str3);
//URLWithString:用于封装NSURL,里面封装的是文件路径或远程链接地址。
//stringWithContentsOfURL:该方法用于以相应的格式(如:NSUTF8StringEncoding)读取文件(本地的或是远程链接的)。

3、字符串导出(写入)存储介质上的文件中

void stringExport() {
    NSString *str = @"123456我是字符串!!!!";
    NSString *path = @"/Users/apple/Desktop/abc.txt";
    // 如果abc.txt文件不存在,会自动创建文件; 如果路径中的文件夹不存在,会直接报错。
    NSError *error;
[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
// (encoding:NSUTF8StringEncoding)编码格式指定错误也会报错
// YES代表要进行原子性操作,也就是会创建一个中间的临时文件存储导出的字符串,再剪切临时文件中的内容进路径指定的文件下;NO代表要进行非原子性操作,也就是不会创建中间的临时文件,而是直接把要导出的字符串直接写入进路径指定的文件中;YES比NO安全性更高。writeToFile:方法是把字符串写入进后面指定路径中的文件.
    if (error) 
    {
            NSLog(@"写入失败:%@", [error localizedDescription]);
    // [error localizedDescription]会返回主要的错误信息,error调用localizedDescription这个方法会把error中的异常信息进行精确提取。
    } else {
        NSLog(@"写入成功");
    }
}

4、字符串转化:

NSString *str = @"hello";
const char *p = [str UTF8String];  //UTF8String 方法用来将OC字符串@"abc"转换为C语言中的字符串,返回值类型为C语言中的字符类型char。

NSString * ptr = [str2 uppercaseString];    //将字符串中的所有小写字符转换成大写,不改变原来的字符串

ptr = [str1 lowercaseString];    //将字符串中的所有大写字符转换成小写,不改变原来的字符串

ptr = [str3 capitalizedString];    //将字符串中出现的第一个字母转换成大写,其余字母小写

5、字符串比较

BOOL ret =  [str1 isEqualTo:str2];    //比较两个字符串是否相等,相等返回YES(1),不相等返回NO(0)   (BOOL   YES(1)  NO(0))

BOOL result = [@"abc" isEqualToString:@"abc"];    //isEqualToString:方法 检测字符串的内容是否相同。
NSLog(@"%i", result);

// NSOrderedAscending  升序:右边的字符串比左边大
// NSOrderedSame  两个字符串的内容相同
// NSOrderedDescending  降序:左边的字符串比右边的大
//上面三个值为下面compare:方法的三个返回值;compare:方法为不忽略大小写的字符串比较方法。
NSComparisonResult result2 = [@"abc" compare:@"Abc"];
if (result2 == NSOrderedSame) {
    NSLog(@"两个字符串的内容相同");
} else if (result2 == NSOrderedAscending) {
    NSLog(@"右边 > 左边");
} else if (result2 == NSOrderedDescending) {
    NSLog(@"右边 < 左边");
}
 
long ret1 = [str1 compare:str2];    //比较两个字符串的大小,str1大 返回1  相等返回0   小于返回-1
 
long ret2 = [str1 caseInsensitiveCompare:str2];    //不区分大小写比较字符串大小
//-(NSComparisonResult)caseInsensitiveCompare:(NSString *)string  方法忽略大小写进行比较,返回值与compare:一致。

6、字符串的搜索

NSString * str = @"www.1000phone.com";
BOOL ret = [str hasPrefix:@"www"];//判断字符串是否以指定字符串开头
BOOL ret1 = [str hasSuffix:@".txt"];//判断字符串是否以指定的字符串结尾
//hasPrefix:方法是判断某个字符串是否以另一个字符串打头,返回值为BOOL值;hasSuffix:方法是判断某个字符串是否以另一个字符串结尾,返回值为BOOL值。

NSRange range = [str rangeOfString:@"456"];// 从头部开始搜索字符串, rangeOfString:方法是检索一个字符串str中是否包含另一个字符串@"456",返回值为NSRange类型。
if (range.location == NSNotFound) {    //判断条件还可以是: range.length == 0;NSNotFound代表如果字符串str中不包含另一个字符串@"456",那么返回值range.location == NSNotFound。
    NSLog(@"不能找到");
} else {
    NSLog(@"找到的范围是:%@", NSStringFromRange(range));
}// NSStringFromRange(range)代表把range这个结构体转换为字符串形式。

range = [str rangeOfString:@"456" options:NSBackwardsSearch]; 
// options:后面设置一个参数,NSBackwardsSearch代表从尾部(倒序)开始搜索字符串,整体语句为在str字符串中从尾部开始搜索@"456"这个字符串。    
range =[str rangeOfString:@"456" options:NSBackwardsSearch range:(NSRange)]; 
// 此语句为更精确的范围搜索语句,range:后面的参数(NSRange)为设定的搜索范围(如:range:NSMakeRange(2, 3)),整体语句为在str字符串中从尾部开始在(NSRange)这个范围内搜索@"456"这个字符串,整体语句返回值为NSRange类型。 

7、字符串的截取

NSString *str = @"123456";
NSLog(@"%@", [str substringFromIndex:3]); 
//substringFromIndex:方法 是从str字符串索引3开始截取到尾部(包括3)。

NSLog(@"%@", [str substringToIndex:3]); 
//substringToIndex:方法 是从str字符串头部开始截取到索引3之前(不包括3)。

NSRange range = NSMakeRange(2, 3);
NSLog(@"%@", [str substringWithRange:range]); 
//substringWithRange:方法 是从str字符串指定范围range进行截取。

NSString *str2 = @"a-b-c-d-5";
NSArray *array = [str2 componentsSeparatedByString:@"-"]; 
//componentsSeparatedByString:方法 是把字符串str2通过字符串@"-"进行分割,返回值是一个集合。
NSLog(@"%@", array);//把集合以字符串的形式打印。

NSString *str3 =  [array objectAtIndex:0];
//objectAtIndex:方法返回值是对象类型 是从array这个集合中取出相应索引0对应的对象。

 unichar c = [@"abc" characterAtIndex:0];  //characterAtIndex: 方法用来取出字符串@"abc"对应索引0的字符,返回值类型为unichar。

8、与路径相关的

NSMutableArray *components = [NSMutableArray array];    //快速创建一个自动释放的可变数组(NSMutableArray)
[components addObject:@"Users"];
[components addObject:@"CJ"];
[components addObject:@"Desktop"];  //向可变数组中添加元素。

NSString *path = [NSString pathWithComponents:components];
//pathWithComponents:为静态方法所以用类名NSString调用 将components数组中的所有元素(字符串)拼接成一个路径,路径分隔符”/”是自动生成的。

NSArray *cmps = [path pathComponents];    // pathComponents方法将路径path按路径分隔符”/”分解成一个数组;是pathWithComponents:方法的逆向过程。

path = @"/users/cj/test";  //path是一个字符串常量,是不可变的。   
NSLog(@"%i", [path isAbsolutePath]); // isAbsolutePath方法是判断path是否为绝对路径(依据是前面有无/,有/的是绝对路径,没有/的是相对路径)。

NSLog(@"最后一个目录:%@",[path lastPathComponent]);
//lastPathComponent方法用来取出path路径中最后一个目录。

NSLog(@"%@", [path stringByDeletingLastPathComponent]);
//stringByDeletingLastPathComponent方法用来删除path最后一个目录。

NSLog(@"%@",[path stringByAppendingPathComponent:@"abc"]);
//在path路径最后面拼接一个目录@"abc"。

NSString *home = NSHomeDirectory(); // 获取应用程序沙盒沙箱目录
NSString *path = [home stringByAppendingString:@"/Documents"];
// stringByAppendingString:方法用于拼接字符串home与@"/Documents"连接起来。

NSString *path = [home stringByAppendingPathComponent:@"Documents"];
// stringByAppendingPathComponent:方法好处在于目录中不区分或着/,系统自动在路径字符串home与@"Documents"之间加上或者/,拼成完整路径。

//建议使用如下方法动态获取路径,此方法不受路径变化与程序员输入有误而影响,会直接寻找到Documents文件夹
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
// NSUserDomainMask 在用户目录下查找
// YES 代表用户目录的~
// NSDocumentDirectory 查找Documents文件夹

// 拼接文件路径
NSString *path = [doc stringByAppendingPathComponent:@"abc.plist"];

9、扩展名处理

NSString *str = @"/User/CJ/test.txt";
NSLog(@"拓展名:%@", [str pathExtension]);
//pathExtension方法用来取得路径str的拓展名。

NSLog(@"%@", [str stringByDeletingPathExtension]);
//stringByDeletingPathExtension方法用来删除str中文件的拓展名.txt

NSLog(@"%@",[str stringByAppendingPathExtension:@"mp3"]);
//stringByAppendingPathExtension:方法 是在str路径最后添加拓展名.mp3

10、字符串转换为基本数据类型

NSString *str = @"123";
int a = [str intValue];    //intValue方法用来把数值型字符串转换为int型数值。
[str floatValue];    //将数字串转化成float型
[str doubleValue];    //将数字串转化成double型

NSLog(@"length=%zi", [@"我是字符串123" length]);
//length 方法用来计算字符串@"我是字符串123"的字数,不是计算字符数。 

11、NSMutableString可变字符串,继承于NSString可以使用NSString的所有方法

NSMutableString * str =  [[NSMutableString alloc]initWithString:@"hello"];//将不可变的字符串转换为可变的字符串

NSMutableString *str = [[NSMutableString alloc] initWithCapacity:10]; //initWithCapacity: 方法用来给字符串str预留10个字数的存储空间。

[str setString:@"1234"];// 设置字符串内容
[str appendString:@"567"];// 在原字符串str后面拼接一个字符串@"567"。
[str appendFormat:@"age is %i and height is %.2f", 27, 1.55f]; 
//appendFormat: 方法在原字符串str后面拼接字符串@"age is %i and height is %.2f"。

NSRange range = [str rangeOfString:@"height"];
// rangeOfString: 方法是用来确定子字符串@"height"在字符串str中的范围。

[str replaceCharactersInRange:range withString:@"no"]; //replaceCharactersInRange: 方法用来把字符串@"no"替换字符串str中指定范围range 中的子字符串。 [str insertString:@"abc" atIndex:2]; //insertString: 方法用来在字符串str索引为2(不要越界)的地方插入字符串@"abc"。 [str deleteCharactersInRange:range]; //deleteCharactersInRange: 方法用来删除字符串str中指定范围range中的子字符串。
原文地址:https://www.cnblogs.com/CJDog/p/4962107.html