计算机与人类会经常进行交互,这就需要一个可以存储和处理人类可读文本的方式。这就是有了字符串的存在。
Objective-C语法中处理字符串的是NSString类和NSMutableString类,就像java中的String类和StringBuffer类,一个是不可变字符串,一个是可变字符串。
NSString类提供了大量初始化和使用方法,现在我们介绍一下。
初始化
1、C语言和OC中字符串
C语言字符串 char *str_c = "C String";
OC中字符串 NSString *str_oc = "OC String"
2、创建字面量字符串
NSString *str1 = @"Hi"; 这些字面量字符串和我们平常创建的并无差别。
3、创建空字符串
//创建空字符串
NSString *str2 = [[NSString alloc] init];
//赋值
*str2 = @"jinkesi";
4、创建字符串并赋值
//可以通过实例方法创建
NSString *str3 = [[NSString alloc] initWithString:@"jinkesi"];
//也可以通过静态方法创建
NSString *str3 = [NSString stringWithString:@"jinkesi"];
这两种方法创建的字符串只有内存释放之间的差异。
5、创建格式化字符串
NSString可以通过格式字符串和参数创建字符串。
//1 通过动态方法创建
NSString *str4 = [[NSString alloc] initWithFormat:@"VN age is %i,height is %.2f",19,1.75f];
//结果为:VN age is 19,height is 1.75
有与之对应的静态方法。stringWithFormat:
NSString *str4 = [NSString stringWithFormat:@"VN age is %i,height is %.2f",19,1.75f];
上面第一种方法,需要在不使用的时候release,也就是释放内存,第二种不需要释放。
格式化对应的符合
%@ 对象
%d, %i 整数
%u 无符整形
%f 浮点/双字
%x, %X 二进制整数
%o 八进制整数
%zu size_t
%p 指针
%e 浮点/双字 (科学计算)
%g 浮点/双字
%s C 字符串
%.*s Pascal字符串
%c 字符
%C unichar
%lld 64位长整数(long long)
%llu 无符64位长整数
%Lf 64位双字
%e 是实数,用科学计数法计的
6、用C字符串创建字符串
将C字符串转换成OC字符串
char *Cstring = "这是C字符串";
NSString *str5 = [[NSString alloc] initWithUTF8String:Cstring];
NSLog(@"str5:%@",str5);
也可以这样NSString *str5 = [[NSString alloc] stringWithUTF8String:"这是C字符串"];
输出结果为:这是C字符串
常用方法
7、字符串长度[@<span style="font-family: Arial, Helvetica, sans-serif;">"这是C字符串" </span>length];
[@"hello world" length];
长度分别为 6 和11,这说明汉字长度和字符都为1。
8、OC字符串转换为C字符串
char *cs = [@"abcd" UTF8String];
9、类型转换
NSString可以转换成基本数据类型,方法如下:
int a = [@"100" intValue];
float b = [@"12.0" floatValue];
double c = [@"134" doubleValue];
NSLog(@"a = %i", a);
NSLog(@"b = %f", b);
NSLog(@"a = %f", c);
输出结果为:
2016-01-06 20:27:31.134 命令行工程[8853:680340] a = 100
2016-01-06 20:27:31.134 命令行工程[8853:680340] b = 12.000000
2016-01-06 20:27:31.134 命令行工程[8853:680340] a = 134.000000
10、大小写变换
NSLog(@"小写变大写:%@",[@"hello" uppercaseString]);
NSLog(@"大写变小写:%@",[@"HELLO" lowercaseString]);
NSLog(@"首字母大写其他小写:%@",[@"hello"capitalizedString]);
输出结果为:
小写变大写:HELLO
大写变小写:hello
首字母大写其他小写:Hello
11、字符串比较
如果只是比较字符串是否相同,就可以使用isEqualToString:方法
NSString *str1 = @"第一个字符串";
NSString *str2 = @"第二个字符串";
BOOL res = [str1 isEqualToString:str2];
res的值为NO。
另一个比较方法是comapre:
-(NSComparisonResult)compare:(NSString *)string
返回类型是一个枚举NSComparisonResult
typedef enum _NSComparisonResult {
NSOrderedAscending = -1, // < 升序
NSOrderedSame, // = 等于
NSOrderedDescending // > 降序
}
NSString *str1 = @"第一个字符串";
NSString *str2 = @"第二个字符串";
NSComparisonResult res = [str1 compare:str2];
res的值为:-1
12、子串
在字符串中查看是否包含子串。
hasPrefixe 匹配字符串头
haSuffix 匹配字符串的尾
//字符串abcdef是否是以字符串ab开头的。
BOOL pre = [@"abcdef" hasPrefix:@"ab"];
//字符串abcdef是否是以字符串ef结尾的。
BOOL suf = [@"abcdef" hasSuffix:@"ef"];
结果pre = YES suf = YES
在一个字符串中查看子串的范围,以及替换。
NSString *str = @"他喜欢玩adc中的 vn和 jinkesi";
NSString *adc = @"adc";
NSString *stone = @"石头人";
NSRange rang = [str rangeOfString:adc];
NSRange rang1 = [str rangeOfString:stone];
NSLog(@"adc在str中起始点的index 为 %lu", (unsigned long)rang.location);
NSLog(@"石头人 在字符串 string中的起点的index 为 %lu",(unsigned long)rang1.location);
//将搜索中的字符串替换成为一个新的字符串
NSString *str1 = [str stringByReplacingCharactersInRange:rang withString:@"打野"];
NSLog(@"替换后字符串为:%@", str1);
//将字符串中" " 全部替换成 *
NSString *str2 = [str stringByReplacingOccurrencesOfString :@" " withString:@"*"];
NSLog(@"替换后字符串为:%@", str2);
输出结果为:
2016-01-06 20:18:03.050 命令行工程[8794:674762] adc在str中起始点的index 为 4
2016-01-06 20:18:03.050 命令行工程[8794:674762] 石头人 在字符串 string中的起点的index 为 9223372036854775807
2016-01-06 20:18:03.051 命令行工程[8794:674762] 替换后字符串为:他喜欢玩打野中的 vn和 jinkesi
2016-01-06 20:18:03.051 命令行工程[8794:674762] 替换后字符串为:他喜欢玩adc中的*vn和*jinkesi
如果查找不到字符串那么结果range对应的location为9223372036854775807。9223372036854775807
9223372036854775807