在开发中,很多时候要进行字符串的使用和处理,简单的对字符串的处理进行了总结。
1. 字符串的创建,字符串创建的方法很多。
//创建字符串,创建字符串的方法很多。
NSString *str1 = @"ceshi";
NSString *str2 = [NSString stringWithFormat:@"%d,%@",1,str1];
NSString *str3 = [NSString stringWithString:str1];
NSString *str4 = [NSString stringWithCString:"haha" encoding:NSUTF8StringEncoding];
//可变字符串的创建
NSMutableString *mutableStr1 = [NSMutableString stringWithString:str1];
2、字符串的长度
//读取字符串的长度
NSInteger leng = [str1 length];
3、字符的拷贝与比较
浅拷贝:浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间
深拷贝:深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉。
retain:始终是浅复制。引用计数每次加一。返回对象是否可变与被复制的对象保持一致。
copy:对于可变对象为深复制,引用计数不改变;对于不可变对象是浅复制, 引用计数每次加一。始终返回一个不可变对象。
mutableCopy:始终是深复制,引用计数不改变。始终返回一个可变对象。
字符串比较:字符串 == 字符串 比较字符串指针 isEqualToString
返回为bool类型 比较字符串内容。代码:
NSString *string1 = @"hehe";
NSString *string2 = [string1 mutableCopy];
NSString *string3 = [string1 copy];
//比较指针
if (string1 == string2)
{
NSLog(@"指针相同");
}
else
{
NSLog(@"string1通过深拷贝给string2,指针不同");
}
//比较指针
if (string1 == string3)
{
NSLog(@"string1通过浅拷贝给string3,指针相同");
}
else
{
NSLog(@"string1通过深拷贝给string3,指针不同");
}
//比较内容
if ([string1 isEqualToString:string2] == YES)
{
NSLog(@"string1 和 String2的内容相同");
}
else
{
NSLog(@"string1 和 String2的内容不同");
}
打印结果:
2016-07-08 09:53:06.094 字符串方法[7531:61533] string1通过深拷贝给string2,指针不同
2016-07-08 09:53:06.095 字符串方法[7531:61533] string1通过浅拷贝给string3,指针相同
2016-07-08 09:53:06.095 字符串方法[7531:61533] string1 和 String2的内容相同
4.字符串的比较函数compare
NSString下面的compare函数的返回值是一个枚举类型NSComparisonResult;
typedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending};
比较的方法:
- (NSComparisonResult)compare:(NSString *)string;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;
options填入的是NSStringCompareOptions类型,是一个枚举值:
typedef NS_OPTIONS(NSUInteger, NSStringCompareOptions) {
NSCaseInsensitiveSearch = 1,//不区分大小写比较
NSLiteralSearch = 2,//区分大小写比较
NSBackwardsSearch = 4,//从字符串末尾开始搜索
NSAnchoredSearch = 8,//搜索限制范围的字符串
NSNumericSearch = 64,//按照字符串里的数字为依据,算出顺序。例如 Foo2.txt < Foo7.txt < Foo25.txt
NSDiacriticInsensitiveSearch NS_ENUM_AVAILABLE(10_5, 2_0) = 128, //忽略 "-" 符号的比较
NSWidthInsensitiveSearch NS_ENUM_AVAILABLE(10_5, 2_0) = 256, //忽略字符串的长度,比较出结果
NSForcedOrderingSearch NS_ENUM_AVAILABLE(10_5, 2_0) = 512, //忽略不区分大小写比较的选项,并强制返回 NSOrderedAscending 或者 NSOrderedDescending
NSRegularExpressionSearch NS_ENUM_AVAILABLE(10_7, 3_2) = 1024 //只能应用于 rangeOfString:..., stringByReplacingOccurrencesOfString:...和 replaceOccurrencesOfString:... 方法。使用通用兼容的比较方法,如果设置此项,可以去掉 NSCaseInsensitiveSearch 和 NSAnchoredSearch
};
具体代码:
//字符串比较函数compare
NSString *strCompare1 = @"aabcd";
NSString *strCompare2 = @"defba";
//compare的返回类型是NSComparisonResult
NSComparisonResult result = [strCompare1 compare:strCompare2];
switch (result) {
case NSOrderedAscending:
NSLog(@"str1 < str2");
break;
case NSOrderedSame:
NSLog(@"两个字符串相等");
break;
case NSOrderedDescending:
NSLog(@"str1 > str2");
break;
default:
NSLog(@"..");
break;
}
运行结果:
2016-07-08 10:32:48.557 字符串方法[9674:82542] str1 < str2
5.字符串的拼接函数
stringByAppendingString : (NSString *) aString;
和 stringByAppendingFormat : (NSString *) format ...
代码:
NSString *append1 = @"Hello ";
NSString *append2 = @"world";
//用stringByAppendingString来进行字符串的拼接
append1 = [append1 stringByAppendingString:append2];
//用stringByAppendingFormat来进行字符串的拼接
append1 = [append1 stringByAppendingFormat:@" iPhone%dS",6];
6.字符串的查找
-(BOOL) hasPrefix : (NSString *) string: //判断一个字符串是否是以string开头;
-(BOOL) hasSuffix : (NSString *) string: //判断一个字符串是否是以string结尾;
-(NSRange) rangeOfString:(NSString *) string; //模式匹配字符串,返回类型是结构体NSRange, 结构体 NSRange里有两个值都是整型的,location代表子字符串在原有字符串中的位置,length代表长度。
代码:
//字符串的查找
NSString *parent = @"abcdefghi";
NSString *pre = @"abc";
NSString *suf = @"ghi";
NSString *mid =@"def";
//匹配开头
if ([parent hasPrefix:pre] == YES) {
NSLog(@"匹配成功");
}
//匹配结尾
if ([parent hasSuffix:suf] == YES) {
NSLog(@"匹配成功");
}
//从中间匹配
NSRange range = [parent rangeOfString:mid];
NSLog(@"location = %d, length = %d", range.location, range.length);
打印结果:
2016-07-08 11:24:05.280 字符串方法[12468:113606] 匹配成功
2016-07-08 11:24:05.280 字符串方法[12468:113606] 匹配成功
2016-07-08 11:24:05.280 字符串方法[12468:113606] location = 3, length = 3
7.字符串的截取
-(NSString *) substringFromIndex : (NSUInteger) from //获取从字符串的开头到字符串结尾的字符串内容,不包含from位置的字符。
-(NSString *)substringToIndex : (NSUInterger) to //获取从字符串开头到字符串的to位置的字符串内容,包含to位置的字符;
-(NSString *) substringWithRange:(NSRange) range //根据NSRange这个范围来获取字符串;
8.字符串中的类型转换函数
-(double) doubleValue; //把字符串的内容转换为double类型
-(float) floatValue; //把相应的字符串转换为float类型
-(int) intValue;//把相应的字符串转换为int类型
9.字符串大小写转换函数
-(NSString *)uppercaseString : //将字符全改成大写的;
-(NSString *)lowercaseString : //将字符全改成小写的;
-(NSString *)capitalizedString :// 将首字母进行大写;
10.字符串替换函数
-(NSString *)stringByReplacingOccurrencesOfString: (NSString *) target withString : (NSString *) replacement;// 把字符串target转换为replacement
-(NSString *)stringByReplacingCharactersInRange : (NSRange) range withString : (NSString *) replacement; //把指定范围内的字符串进行替换;
-(NSArray *) componentsSeparatedByString:(NSString *) separator://以字符串中的某个字符进行分割,返回数组对象