Objective-C 5 NSString常用方法


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

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




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值