您的位置:首页 > 移动开发 > Objective-C

Objective-C 5 NSString常用方法

2016-01-03 15:10 495 查看
计算机与人类会经常进行交互,这就需要一个可以存储和处理人类可读文本的方式。这就是有了字符串的存在。

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: