iOS小知识集锦-NSString常用方法汇总

NSString 几乎是 iOS 开发中最常用的类了。几乎所有的地方都会用到各种各样的字符串。NSString 也有很多的方法。这篇文章记录我在使用 NSString 类的时候,会用到的知识点。也是 iOS小知识集锦的第一篇文章吧。

创建字符串

1
2
3
4
5
6
7
8
9
10
11
// 直接创建字符串
NSString *str1 = @"this is Cepheus Sun";
// 用一个字符串创建另一个字符串
NSString *str2 =[[NSString alloc] initWithString:str1];
// 用c的字符串创建oc的字符串
NSString *str4 = [[NSString alloc] initWithUTF8String:"我是程序猿"];
// 用格式符拼接字符串
NSString *str3 = [[NSString alloc] initWithFormat:@"%@%@",str1,str4];

读取文件来初始化字符串

1
2
3
4
5
6
7
8
9
10
11
// 先创建一个error对象,用来保存错误信息
NSError *error = nil;
//@"/Users/xxx/Desktop/123.txt"为文件路径
NSString *str01 = [NSString stringWithContentsOfFile:@"/Users/xxx/Desktop/123.txt" encoding:NSUTF8StringEncoding error:&error];
// 创建if语句判断输出
if (error) { // 一旦为真,说明读取文件出错了
NSLog(@"读取文件出错 %@", error);
} else {
NSLog(@"读取成功:%@", str01);
}

通过 URL 读取文件,初始化字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// http://www.baidu.com/image/xxxx.png
// url = 协议头://主机地址/在主机里面的路径
// ftp协议,传输比较大的文件
// file协议,读取比较大的文件
// file协议,读取文本文件
NSURL *url = [NSURL URLWithString:@"file://192.168.1.1/user/apple/desktop/test.txt"]
// 如果不写 IP 地址,就会默认访问本机
NSURL *url = [NSURL URLWithString:@"file:///user/CepheusSun/desktop/123.txt"]
// 将本地文件路径创建为 URL 对象(路径可以是中文)
NSURL *url = [NSURL fileURLWithPath:@"/Users/CepheusSun/Desktop/123.txt"];
// 将对应对网络资源文件路径创建为URL对象(路径必须是英文字母)
// SURL *url = [NSURL URLWithString:@"file:///Users/CepheusSun/Desktop/123.txt"];
// 先创建一个 error 对象,用来保存错误信息
NSError *error1 = nil;
// 调用URL地址的文件
NSString *str03 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error1];
if (error1) { // 一旦为真,说明读取文件出错了
NSLog(@"读取文件出错 %@", error1);
} else{
NSLog(@"读取成功:%@", str03);
}

通过 url 或 file 将字符串信息写入文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
NSString *s001 = @"dfa短发方法法德俄额度 短发舒服";
// NSURL *myurl = [NSURL fileURLWithPath:@"/Users/progamersunny/Desktop/123.txt"];
NSURL *myurl = [NSURL URLWithString:@"file:///Users/progamersunny/Desktop/123.txt"];
// 调用将字符串写入URL地址文件的方法
[s001 writeToURL:myurl atomically:YES encoding:NSUTF8StringEncoding error:nil];
// 调用将字符串写入本机文件的方法
// [s001 writeToFile:@"/Users/xlzhang/Desktop/OC基础知识点汇总/OC中NSString常用方法汇总/text1.txt1" atomically:YES encoding:NSUTF8StringEncoding error:nil];
// 提取文件内容
NSString *str04 = [NSString stringWithContentsOfFile:@"/Users/xlzhang/Desktop/text/text/123.txt" encoding:NSUTF8StringEncoding error:nil];

创建临时字符串

1
2
3
4
5
6
7
8
// 用一个字符串创建另一个临时字符串
NSString *str5 = [NSString stringWithString:str2];
// 用c的字符串创建oc的临时字符串
NSString *str6 = [NSString stringWithUTF8String:"我是程序猿"];
// 用格式符拼接字符串
NSString *str7 = [NSString stringWithFormat:@"%@%@",str5,str3];

字符串比较

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 比较两个字符串是否相等,返回BOOL值YES或NO
BOOL ret = [str6 isEqualToString: str7];
// 比较并返回谁大谁小(返回值是个枚举类型: 比较的结果 = -1,0,1)
// typedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending};
// 如果左边str1小于右边str4就返回-1,相等就返回0,大于就返回1
NSComparisonResult ret1 = [str1 compare: str4];
// 忽略大小写进行比较
NSComparisonResult ret01 = [str1 caseInsensitiveCompare:str4];
// 有条件的比较谁大谁小(options的参数为限制条件)
// options: 指定比较的条件
// NSCaseInsensitiveSearch 忽略大小写
// NSBackwardsSearch 从后往前比较
// NSNumericSearch 首先比较字符串里面的字符的个数,个数一样再比较大小
NSComparisonResult ret02 = [str1 compare:str4 options:NSCaseInsensitiveSearch]; // 忽略大小写进行比较

从一个字符串中查找子字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
NSString *s1 = @"I am such a poor programer.";
NSString *s2 = @"am";
// 返回值类型是一个枚举类型NSRange,包含两个lu整型变量location(位置)和length(长度)
NSRange range = [s1 rangeOfString:s2];// 查找并返回位置
// 有条件的查找,options后面为: NSCaseInsensitiveSearch 表示忽略大小写
NSRange range01 = [s1 rangeOfString:s2 options:NSLiteralSearch]; // options表示查找方式
BOOL b1 = [s1 containsString:s2]; // 返回值类型是一个BOOL值,YES表示s1包含有s2,NO表示没有包含
// 如果查找的字符串不存在,返回的值:range.length = 0;range.location = NSNotFound (NSNotFound = -1)

单独提取某一个字符

1
2
3
4
5
6
7
8
9
// 创建一个可变字符串对象
NSMutableString *str02 = [[NSMutableString alloc] init];
// 循环获取字符中的每一个字符
for (int i = 0;i < [str1 length]; i++){
// 此处提取的字符是两个字节,因此可以提取汉字
unichar c = [str1 characterAtIndex:i];
// 将获取对字符合并到可变字符串中
[str02 appendFormat:@"%C",c];
}

从字符串中提取某个范围点字符生成新字符串--(从第一个字符开始到某个位置结束,从某个位置开始到字符串尾,某点开始某点结束)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
NSString *s3 = @"0123456789";
NSString *s4 = [s3 substringToIndex: 6 ];
// 从s3中提取从头至第6个字符(不包括第6个),生产新字符串,返回这个新字符串的地址
// s4的结果为: "012345"
NSString *s5 = [s3 substringFromIndex: 6 ];
// 从s3中提取从第6个字符(包括第6个)到最后一个字符,生产新字符串,返回这个新字符串的地址
// s5到结果为: "6789"
NSRange range1 = {3,4};
// 3表示起始位置,4表示长度,表示从第3个字符(包含第3个)开始提取连续的4个字符,生产新字符串,返回这个新字符串的地址
NSString *s6 = [s3 substringWithRange:range1];
// 先定义一个range值
// s6的结果为: "3456"
// 也可以合并一起写
NSString *s7 = [s3 substringWithRange:NSMakeRange(3, 4)]; // NSMakeRange 是一个c函数

字符串与其他类型的转换

1
2
3
4
5
NSString *intStr = @"1234";
NSString *floatStr = @"5.14";
int a = [intStr intValue];
float f = [floatS floatValue];

字符串首位(前缀后缀的对比)

1
2
3
NSString *url1 = @"https://www.baidu.com/rader/p.png";
BOOL b001 = [url1 hasPrefix:@"https://"]; // 判断字符串首位是否与输入的字符串相同
BOOL b002 = [url1 hasSuffix:@"p.png"]; // 判断字符串尾部是否与输入的字符串相同

字符串中某些字符的替换

1
2
3
NSString *url2 = @"http://www.baidu.com/rader/p.gdp";
// 将withString:字符串内容替换掉url1中 OfString:字符串内容 后生成一个新的字符串url2
NSString *url3 = [url2 stringByReplacingOccurrencesOfString:@"/" withString:@"*"];

去掉字符串首尾的某些连续的字符

1
2
3
4
5
6
7
8
9
10
11
NSString *url4 = @" http://www.baidu.com ";
NSCharacterSet *set = [NSCharacterSet whitespaceCharacterSet]; // 去除空格
// lowercaseLetterCharacterSet 去除小写字母
// uppercaseLetterCharacterSet 去除大写字母
NSCharacterSet *set1 = [NSCharacterSet characterSetWithCharactersInString:@"指定的字符串"]; // 去除指定的字符串
// 去除字符串首尾的某些相同字符,有多少个就去掉多少个
NSString *url5 = [url4 stringByTrimmingCharactersInSet:set];

可变字符串:(以上字符串方法都可以用于可变字符串)

可变字符串是字符串的子类,所以可以使用所有NSString的所有方法,其比起字符串增加的功能主要有:增,删,改,擦

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 创建一个可变字符串
NSMutableString *string1 = [[NSMutableString alloc] init];
[string1 setString:@"1234"]; // 对可变字符串进行赋值
[string1 setString:@"abcd"]; // 已赋值的可变字符串可以重新赋值(改)
[string1 appendString:@"123"]; // 可以增加字符串,增加后结果为:"abcd123"
[string1 appendFormat:@"%c",'D']; // 可以用格式符增加相应的字符或字符串,结果为:"abcd123D"
[string1 insertString:@"xxxx" atIndex:4]; // 可以把"xxxx"字符串插入到第4个字符开始的地方,原第四个开始的后面字符依次后移
// 插入后的结果为: "abcdxxxx123D"
// 也可以把字符串改为另一个字符串的地址,因为它们传递的都是地址
NSString *ss1 = [NSString stringWithFormat:@"%d",-88];
[string1 insertString:ss1 atIndex:6]; // 结果为: string1 = "abcdxx-88xx123D"
1
2
3
4
NSRange range2 = {3,4};
// 3表示起始位置,4表示长度,表示从第3个字符(包含第3个)开始删除连续的4个字符,后面字符依次前移
[string1 deleteCharactersInRange:range2];
// 结果为: string1 = "abc88xx123D"
1
2
3
4
[string1 replaceCharactersInRange:NSMakeRange(3, 2) withString:@"RRRRRRRRRR"];
// 3表示起始位置,2表示长度,表示从第3个字符(包含第3个)开始将后面的2个字符换成字符串"RRRRRRRRRR",后面字符依次后移
// 结果为: string1 = "abcRRRRRRRRRRxx123D"
NSLog(@"\nstring1 = %@",string1);
1
2
3
4
5
6
7
// 擦除原有字符串内容重新设置字符串的内容
[string1 setString:@"---"];
// 等同于
// string1.string = @"---";
NSLog(@"string1 = %@", string1);
// 结果为: string1 = "---"
CepheusSun wechat
订阅我的公众号,每次更新我都不一定会告诉你!
坚持原创技术分享,您的支持将鼓励我继续创作!
0%