这篇文章主要详细介绍iOS中字符串的各种用法!!!
目录
字符串的创建
字符串属性
字符串的截取
字符串的比较
字符串搜索
字符串拼接
字符串转化为基本数据
字符大小写转化
字符串分行分段
字符串列举条件
字符串编码与转换
字符串分割
字符串操作(修剪,替换,折叠,填充)
字符串的读取
NSMutableString介绍
NSRange基本概念
NSRange的创建
字符串点语法封装使用
NSString的基本概念 (NSString是不可变字符串)
什么是NSString?
一个NSString代表一个字符串(文字内容)
一般称NSString为字符串类
01 NSString的创建
方式1:
//常量区中的字符串只要内容一致, 不会重复创建
- (void)create1 {
NSString *str1 = @"lion";
NSString *str2 = @"lion";
//输出地址不一样
NSLog(@"\n %p \n %p",&str1,&str2);
}
方式2:
//通过alloc init创建,存储在堆区,若其它对象存储的内容一样,不会指针指向同一个地址,会直接alloc init分配存储空间(str2对象则存储在栈区)。
//注意:但是不同平台存储方式不一样,mac中的地址会相同,因为对字符串对象进行过优化,二iOS平台则地址不同。
//不同编译器存储方式也不一样,iOS6.0以前会通过alloc重新创建地址,而iOS6.0后alloc会指向同一个地址
- (void)create2 {
//stringWithFormat 可以进行拼接
NSString *str1 = [NSString stringWithFormat:@"lion"];
NSString *str2 = [NSString stringWithFormat:@"lion"];
NSLog(@"\n %p \n %p",str1,str2);
}
方式3:
//通过类工厂方法创建。存储在堆区,存储方式等同于alloc init(因为类工厂方法就在类中封装了alloc init)
NSString *str3 = [NSString stringWithFormat:@"hig"];
NSString *str33 = [NSString stringWithFormat:@"hig"];
NSLog(@"str3:%@ str33:%@",str3,str33);
方式4:
/*通过alloc和类工厂方法都会在堆区分配内存,但是initWithString不会分配内存,因为:
initWithString是通过copy返回一个字符串,二这个copy是浅拷贝,所以无论什么平台,都会指向同一块地址。
*/
//下面会发生警告uising ”initWithString“ with a literal is redundant(用文字是多余的),相当于常量的创建方式。
NSString *str4 = [[NSString alloc] initWithString:@"klm"];
NSLog(@"str4:%@", str4);
02 字符串属性:
最直接的属性有length,字符串长度
// 全部字符转为大写字母
- (NSString *)uppercaseString;
// 全部字符转为小写字母
- (NSString *)lowercaseString;
//首字母变大写,其他字母都变小写
- (NSString *)capitalizedString;
03 字符串的截取:
//截取指定位置之后的字符串
- (NSString *)substringFromIndex:(NSUInteger)from;
//从0下标开始截取到指定位置的字符串
- (NSString *)substringToIndex:(NSUInteger)to;
//截取指定范围的字符串
- (NSString *)substringWithRange:(NSRange)range;
//截取字符串指定范围的字符
- (void)getCharacters:(unichar *)buffer range:(NSRange)range;
04 字符串的比较
最常用的比较相等,返回值为BOOL:
-(BOOL)isEqualToString:(NSString *)aString;
以NSComparisonResult
作为比较返回结果的方法:
- (NSComparisonResult)compare:(NSString *)string;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)rangeOfReceiverToCompare;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)rangeOfReceiverToCompare locale:(nullable id)locale; // locale arg used to be a dictionary pre-Leopard. We now accept NSLocale. Assumes the current locale if non-nil and non-NSLocale. nil continues to mean canonical compare, which doesn't depend on user's locale choice.
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;
- (NSComparisonResult)localizedCompare:(NSString *)string;
- (NSComparisonResult)localizedCaseInsensitiveCompare:(NSString *)string;
- (NSComparisonResult)localizedStandardCompare:(NSString *)string NS_AVAILABLE(10_6, 4_0);
返回结果NScomparisonResult解释,
typedef NS_ENUM(NSInteger, NSComparisonResult) {
NSOrderedAscending = -1L, //1 递增
NSOrderedSame, //0 相等
NSOrderedDescending//1 递减
};
参数options:
NSStringCompareOptions | 说明 |
---|---|
NSCaseInsensitiveSearch | 不区分大小写比较 |
NSLiteralSearch | 区分大小写比较 |
NSBackwardsSearch | 从字符串末尾开始搜索 |
NSAnchoredSearch | 搜索限制范围的字符串 |
NSNumericSearch | 按照字符串里的数字为依据,算出顺序 |
NSDiacriticInsensitiveSearch | 忽略 "-" 符号的比较 |
NSWidthInsensitiveSearch | 忽略字符串的长度,比较出结果 |
NSForcedOrderingSearch | 忽略不区分大小写比较的选项 |
NSRegularExpressionSearch | 只能应用于 rangeOfString:..., stringByReplacingOccurrencesOfString:...和 replaceOccurrencesOfString:...方法 |
比较原理:
如果没有调用option
的方法,比较是从两个字符串的第一个字母开始一一对比,相同则比较下一个,不同则返回结果为升序或者降序,两个比较字符串建议长度一致,不一致也可以比较
示例:
第一种:
// 两个字符串的内容相同就返回YES, 否则返回NO
- (BOOL)isEqualToString:(NSString *)aString
NSString *str1 = @"lion";
NSString *str2 = [NSString stringWithFormat:@"lion"];
if ([str1 isEqualToString:str2]) {
NSLog(@"字符串内容一样");
}
if (str1 == str2) {
NSLog(@"字符串地址一样");
}
第二种:
/**
这个方法可以用来比较两个字符串内容的大小
比较方法: 逐个字符地进行比较ASCII值,返回NSComparisonResult作为比较结果
NSComparisonResult是一个枚举,有3个值:
如果左侧 > 右侧,返回NSOrderedDescending,
如果左侧 < 右侧,返回NSOrderedAscending,
如果左侧 == 右侧返回NSOrderedSame
*/
- (NSComparisonResult)compare:(NSString *)string {
NSString *str1 = @"abc";
NSString *str2 = @"abd";
switch ([str1 compare:str2]) {
case NSOrderedAscending:
NSLog(@"后面一个字符串大于前面一个");
break;
case NSOrderedDescending:
NSLog(@"后面一个字符串小于前面一个");
break;
case NSOrderedSame:
NSLog(@"两个字符串一样");
break;
}
//输出结果: 后面一个字符串大于前面一个
}
// 忽略大小写进行比较,返回值与compare:一致
- (NSComparisonResult) caseInsensitiveCompare:(NSString *)string;
05 字符串搜索
//////////搜索基本//////////
//1.是否包含前缀(以str开头)
- (BOOL)hasPrefix:(NSString *)str;
//2.是否包含后缀(以str结尾)
- (BOOL)hasSuffix:(NSString *)str;
//3.获取公共前缀
- (NSString *)commonPrefixWithString:(NSString *)str options:(NSStringCompareOptions)mask;
//4.是否包含字符串
- (BOOL)containsString:(NSString *)str;
//5.本地化是否包含字符串(不区分大小写)
- (BOOL)localizedCaseInsensitiveContainsString:(NSString *)str;
//6.本地化是否包含字符串(标准)
- (BOOL)localizedStandardContainsString:(NSString *)str;
//7.本地化搜索字符串范围(标准)
- (NSRange)localizedStandardRangeOfString:(NSString *)str;
//////////搜索字符串//////////
//8.搜索(指定字符串)
- (NSRange)rangeOfString:(NSString *)searchString;
//9.搜索(指定字符串,条件)
- (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask;
//10.搜索(指定字符串,条件,范围)
- (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask range:(NSRange)searchRange;
//11.搜索(指定字符串,条件,范围,本地化)
- (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask range:(NSRange)searchRange locale:(nullable NSLocale *)locale;
//////////搜索字符集合//////////
//12.搜索(指定字符集合)
- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)searchSet;
//13.搜索(指定字符集合,条件)
- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)searchSet options:
(NSStringCompareOptions)mask;
//14.搜索(指定字符集合,条件,范围)
- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)searchSet options:(NSStringCompareOptions)mask range:(NSRange)searchRange;
//15.用字符串的字符编码指定索引查找位置
- (NSRange)rangeOfComposedCharacterSequenceAtIndex:(NSUInteger)index;
//16.用字符串的字符编码指定区域段查找位置
- (NSRange)rangeOfComposedCharacterSequencesForRange:(NSRange)range;
06 字符串拼接
- (NSString *)stringByAppendingString:(NSString *)aString;
- (NSString *)stringByAppendingFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);
// 如果是添加路径的话可以使用:
- (NSString *)stringByAppendingPathComponent:(NSString *)str;
07 字符串转化为基本数据
@property (readonly) double doubleValue;
@property (readonly) float floatValue;
@property (readonly) int intValue;
@property (readonly) NSInteger integerValue NS_AVAILABLE(10_5, 2_0);
@property (readonly) long long longLongValue NS_AVAILABLE(10_5, 2_0);
@property (readonly) BOOL boolValue NS_AVAILABLE(10_5, 2_0);
注意:这里需要提示一下,如果字符串内全是数字,则会全部转化(如果有小数点,转为float和double类型会全转,其他形式只取整数,),如果全是非数字,或者没有以数字开头,怎转化值为0,比如:@"dgtgwge566" //0 如果开头以数字开头,开始会提取到开头几个数字的,后面的提取不了,如:@"456dkhgeo90" //456
// 返回字符串的长度(有多少个文字)
- (NSUInteger)length;
// 返回index位置对应的字符
- (unichar)characterAtIndex:(NSUInteger)index;
// 转为基本数据类型
- (double)doubleValue;
- (float)floatValue;
- (int)intValue;
NSString *str1 = @"22";
NSString *str2 = @"22";
int res = str1.intValue + str2.intValue;
NSLog(@"res = %i", res);
NSString *str1 = @"22";
NSString *str2 = @"22.2";
double res = str1.doubleValue + str2.doubleValue;
NSLog(@"res = %f", res);
// 转为C语言中的字符串
- (char *)UTF8String;
NSString *str = @"love";
const char *cStr = [str UTF8String];
NSLog(@"cStr = %s", cStr);
char *cStr = "love";
NSString *str = [NSString stringWithUTF8String:cStr];
NSLog(@"str = %@", str);
08 字符大小写转化
//////////字符串大小写转换//////////
NSString *string = @"string";
NSLog(@"大写: %@", string.uppercaseString);
NSLog(@"小写: %@", string.lowercaseString);
NSLog(@"首字母大写: %@", string.capitalizedString);
//输出: 大写: STRING
//输出: 小写: string
//输出: 首字母大写: String
//本地化(大写)
- (NSString *)uppercaseStringWithLocale:(nullable NSLocale *)locale;
//本地化(小写)
- (NSString *)lowercaseStringWithLocale:(nullable NSLocale *)locale;
//本地化(首字母大写)
- (NSString *)capitalizedStringWithLocale:(nullable NSLocale *)locale;
09 字符串分行分段
//////////分行//////////
//1.指定范围,分行取字符串
- (void)getLineStart:(nullable NSUInteger *)startPtr end:(nullable NSUInteger *)lineEndPtr contentsEnd:(nullable NSUInteger *)contentsEndPtr forRange:(NSRange)range;
//2.获取指定范围该行的范围
- (NSRange)lineRangeForRange:(NSRange)range;
//////////分段//////////
//3.指定范围,分段取字符串
- (void)getParagraphStart:(nullable NSUInteger *)startPtr end:(nullable NSUInteger *)parEndPtr contentsEnd:(nullable NSUInteger *)contentsEndPtr forRange:(NSRange)range;
//4.获取指定范围该段落的范围
- (NSRange)paragraphRangeForRange:(NSRange)range;
//////////字符串分行,分段//////////
NSString *string = @"123 456\nABC,DEF\nabc.def";
//获取该行的范围(指定范围)
NSRange range1 = [string lineRangeForRange:NSMakeRange(0, 10)];
NSLog(@"%ld 行长度: %ld", range1.location, range1.length);
//输出: 0 行长度: 16
//获取该段落范围(指定范围)
NSRange range2 = [string paragraphRangeForRange:NSMakeRange(0, 3)];
NSLog(@"%ld 段落长度: %ld", range2.location, range2.length);
//输出: 0 段落长度: 8
10 字符串列举条件
NSStringEnumerationOptions | 说明 |
---|---|
NSStringEnumerationByLines | 按行 |
NSStringEnumerationByParagraphs | 按段落 |
NSStringEnumerationByComposedCharacterSequences | 按字符顺序 |
NSStringEnumerationByWords | 按单词,字 |
NSStringEnumerationBySentences | 按句子 |
NSStringEnumerationReverse | 反向遍历 |
NSStringEnumerationSubstringNotRequired | 不需要子字符串 |
NSStringEnumerationLocalized | 本地化 |
//////////字符串列举//////////
NSString *string = @"123456\nABCDEF\nabcdef";
//1.列举(按行)
[string enumerateLinesUsingBlock:^(NSString * _Nonnull line, BOOL * _Nonnull stop) {
NSLog(@"每行: %@", line);
}];
//输出: 每行: 123456
//输出: 每行: ABCDEF
//输出: 每行: abcdef
//2.列举(范围,条件)
[string enumerateSubstringsInRange:NSMakeRange(5, 10) options:NSStringEnumerationByLines usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {
NSLog(@"%@", substring);
NSLog(@"%ld %ld", substringRange.location, substringRange.length);
NSLog(@"%ld %ld", enclosingRange.location, enclosingRange.length);
}];
11 字符串编码与转换
//1.选择编码,是否允许有损编码【重要】
- (nullable NSData *)dataUsingEncoding:(NSStringEncoding)encoding allowLossyConversion:(BOOL)lossy;
//2.选择编码
- (nullable NSData *)dataUsingEncoding:(NSStringEncoding)encoding;
//3.判断是否可以无损编码
- (BOOL)canBeConvertedToEncoding:(NSStringEncoding)encoding;
//4.C字符编码转换
- (nullable __strong const charchar *)cStringUsingEncoding:(NSStringEncoding)encoding;
//5.判读C字符转化是否可以成功
- (BOOL)getCString:(charchar *)buffer maxLength:(NSUInteger)maxBufferCount encoding:(NSStringEncoding)encoding;
//6.指定缓存区转换
- (BOOL)getBytes:(nullable voidvoid *)buffer maxLength:(NSUInteger)maxBufferCount usedLength:(nullable NSUInteger *)usedBufferCount encoding:(NSStringEncoding)encoding options:(NSStringEncodingConversionOptions)options range:(NSRange)range remainingRange:(nullable NSRangePointer)leftover;
//7.对字符串进行编码时所需的最大字节数
- (NSUInteger)maximumLengthOfBytesUsingEncoding:(NSStringEncoding)enc;
//8.对字符串进行编码时所需的字节数
- (NSUInteger)lengthOfBytesUsingEncoding:(NSStringEncoding)enc;
//9.可用字符串编码
+ (const NSStringEncoding *)availableStringEncodings;
//10.本地化编码名称
+ (NSString *)localizedNameOfStringEncoding:(NSStringEncoding)encoding;
//11.默认C字符串编码
+ (NSStringEncoding)defaultCStringEncoding;
12 字符串分割
NSCharacterSet集合
NSCharacterSet | 说明 |
---|---|
controlCharacterSet | 控制符 |
whitespaceCharacterSet | 空格符 |
whitespaceAndNewlineCharacterSet | 空格换行符 |
decimalDigitCharacterSet | 小数 |
letterCharacterSet | 文字 |
lowercaseLetterCharacterSet | 小写字母 |
uppercaseLetterCharacterSet | 大写字母 |
nonBaseCharacterSet | 非基础 |
alphanumericCharacterSet | 数字字母 |
decomposableCharacterSet | 可分解 |
illegalCharacterSet | 非法 |
punctuationCharacterSet | 标点 |
capitalizedLetterCharacterSet | 大写 |
symbolCharacterSet | 符号 |
newlineCharacterSet | 换行符 |
//////////字符串分割//////////
NSString *string = @"A_B_c_D_E_F";
//分割(指定字符串)
NSArray *resultArr1 = [string componentsSeparatedByString:@"_"];
NSLog(@"%@", resultArr1);
//输出: (A, B, c, D, E, F)
//分割(指定字符集合)
NSArray *resultArr2 = [string componentsSeparatedByCharactersInSet:[NSCharacterSet lowercaseLetterCharacterSet]];
NSLog(@"%@", resultArr2);
//输出: ("A_B_" , "_D_E_F")
13 字符串操作(修剪,替换,折叠,填充)
NSString *string = @"3EWRs a;af";
//////////修剪//////////
NSString *result1 = [string stringByTrimmingCharactersInSet:[NSCharacterSet lowercaseLetterCharacterSet]];
NSLog(@"%@", result1);
//输出: 3EWRs a;
//////////填充//////////
NSString *result2 = [string stringByPaddingToLength:20 withString:@"填充" startingAtIndex:1];
NSLog(@"%@", result2);
//输出: 3EWRs a;af充填充填充填充填充填
//////////折叠//////////
NSString *result3 = [string stringByFoldingWithOptions:NSNumericSearch locale:[NSLocale systemLocale]];
NSLog(@"%@", result3);
//输出: 3EWRs a;af
//////////替换//////////
//替换(指定字符串)
NSString *result4 = [string stringByReplacingOccurrencesOfString:@" " withString:@"替换"];
NSLog(@"%@", result4);
//输出: 3EWRs替换a;af
//替换(指定字符串,条件,范围)
NSString *result5 = [string stringByReplacingOccurrencesOfString:@"a" withString:@"替换" options:NSRegularExpressionSearch range:NSMakeRange(0, string.length - 2)];
NSLog(@"%@", result5);
//输出: 3EWRs 替换;af
//替换(指定范围)
NSString *result6 = [string stringByReplacingCharactersInRange:NSMakeRange(0, string.length) withString:@"替换"];
NSLog(@"%@", result6);
//输出: 替换
14字符串的读写
读取:
// 用来保存错误信息
NSError *error = nil;
// 读取文件内容
NSString *str = [NSString stringWithContentsOfFile:@"/Users/xxx/Desktop/xxx.txt" encoding:NSUTF8StringEncoding error:&error];
// 如果有错误信息
if (error) {
NSLog(@"读取失败, 错误原因是:%@", [error localizedDescription]);
} else { // 如果没有错误信息
NSLog(@"读取成功, 文件内容是:\n%@", str);
}
写入:
// writeToFile 写入
NSString *str = @"Lion";
BOOL flag = [str writeToFile:@"/Users/LJH/Desktop/Lion.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
if (flag == 1) {
NSLog(@"写入成功");
}
//////////字符串写入//////////
//写入到指定路径,编码的文件中
[string writeToFile:@"/Users/Desktop/LuisX.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
//写入到指定URL,编码的文件中
[string writeToURL:[NSURL URLWithString:@"file://LuisX.text"] atomically:YES encoding:NSUTF8StringEncoding error:nil];
注意: 重复写入同一个文件会覆盖上一个文件
15 字符串与路径
方式1:
- (BOOL)isAbsolutePath;
// 是否为绝对路径
- (void)isAbsolutePath
{
// 其实就是判断是否以/开头
NSString *str = @"/Users/xxx/Desktop/Lion.txt";
NSString *str = @"Users/xxx/Desktop/Lion.txt";
if ([str isAbsolutePath]) {
NSLog(@"是绝对路径");
}else
{
NSLog(@"不是绝对路径");
}
}
方式2:
- (NSString *)lastPathComponent;
//获得最后一个目录
- (void)lastPathComponent {
// 截取最后一个/后面的内容
NSString *str = @"/Users/LJH/Desktop/Lion.txt";
NSString *component = [str lastPathComponent];
NSLog(@"component = %@", component);
}
方式3:
- (NSString *)stringByDeletingLastPathComponent;
// 删除最后一个目录
- (void)stringByDeletingLastPathComponent {
// 其实就是上次最后一个/和之后的内容
NSString *str = @"/Users/xxx/Desktop/Lion.txt";
NSString *newStr = [str stringByDeletingLastPathComponent];
NSLog(@"newStr = %@", newStr);
//打印结果:newStr = /Users/LJH/Desktop
}
方式4:
- (NSString *)stringByAppendingPathComponent:(NSString *)str;
// 在路径的后面拼接一个目录 (也可以使用stringByAppendingString:或者stringByAppendingFormat:拼接字符串内容)
- (void)stringByAppendingPathComponent {
// 其实就是在最后面加上/和要拼接得内容
// 注意会判断后面有没有/有就不添加了, 没有就添加, 并且如果有多个会替换为1个
// NSString *str = @"/Users/NJ-Lee/Desktop";
NSString *str = @"/Users/LJH/Desktop/";
NSString *newStr = [str stringByAppendingPathComponent:@"Lion"];
NSLog(@"newStr = %@", newStr);
//打印结果:newStr = /Users/LJH/Desktop/Lion
}
16 NSMutableString的介绍
NSMutableString
是NSString的
字类,可以动态的扩展字符串。初始化也可以分配容量
//////////字符串分配容量//////////
//1.初始化容量为Capacity大小的字符串 (需要手动释放内存)
NSMutableString *mutableStr1 = [[NSMutableString alloc] initWithCapacity:20];
//2.初始化容量为Capacity大小的字符串 (不需要手动释放内存)
NSMutableString *mutableStr2 = [NSMutableString stringWithCapacity:20];
// 扩展方法
NSMutableString *str = [NSMutableString stringWithString:@"string"];
//////////插入//////////
[str insertString:@"123" atIndex:2];
NSLog(@"%@", str);
//输出: st123ring
//////////删除//////////
[str deleteCharactersInRange:NSMakeRange(2, 2)];
NSLog(@"%@", str);
//输出: st3ring
//////////拼接//////////
[str appendString:@"456"];
NSLog(@"%@", str);
//输出: st3ring456
//////////格式化拼接//////////
[str appendFormat:@"7 89"];
NSLog(@"%@", str);
//输出: st3ring4567 89
//////////设置新字符串//////////
[str setString:@"string"];
NSLog(@"%@", str);
//输出: string
//////////字符串替换//////////
//1.指定范围替换
[str1 replaceCharactersInRange:NSMakeRange(2, 2) withString:@"123"];
NSLog(@"%@", str1);
//输出: st123ng
//2.指定字符串,条件,范围替换
[str1 replaceOccurrencesOfString:@"123" withString:@"--" options:NSRegularExpressionSearch range:NSMakeRange(0, str1.length)];
NSLog(@"%@", str1);
//输出: st--ng
17 NSRange基本概念
NSRange是Foundation框架中比较常用的结构体, 它的定义如下:
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
// NSUInteger的定义
typedef unsigned int NSUInteger;
NSRange用来表示事物的一个范围,通常是字符串里的字符范围或者数组里的元素范围
// NSRange有2个成员
NSUInteger location : 表示该范围的起始位置
NSUInteger length : 表示该范围内的长度
比如@“I Miss You Lion”中的@“Lion”可以用location为11,length为4的范围来表示
18 NSRange的创建
方式1:
NSRange range;
range.location = 11;
range.length = 4;
方式2
NSRange range = {11, 4};
或者
NSRange range = {.location = 11,.length = 4};
方式3 : 使用NSMakeRange函数
NSRange range = NSMakeRange(11, 4);
字符串点语法封装使用
示例:具体封装查看demo
NSString *str = @"你是虎";
NSString *str1 = @"我是龙";
NSString *str2 = @"他是虫";
NSString *formateStr = str.add(str1).add(str2);
NSMAttrString *attributeStr = formateStr.attributedString;
attributeStr.subString(str).font([UIFont systemFontOfSize:12]).color([UIColor redColor])
.subString(str1).font([UIFont boldSystemFontOfSize:14]).color([UIColor blueColor])
.subString(str2).font([UIFont boldSystemFontOfSize:18]).color([UIColor greenColor]);
self.titleLabel.attributedText = attributeStr;