NSString类详解

这篇文章主要详细介绍iOS中字符串的各种用法!!!

目录
字符串的创建
字符串属性
字符串的截取
字符串的比较
字符串搜索
字符串拼接
字符串转化为基本数据
字符大小写转化
字符串分行分段
字符串列举条件
字符串编码与转换
字符串分割
字符串操作(修剪,替换,折叠,填充)
字符串的读取
NSMutableString介绍
NSRange基本概念
NSRange的创建
字符串点语法封装使用

Demo-点语法封装再最后

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的介绍

NSMutableStringNSString的字类,可以动态的扩展字符串。初始化也可以分配容量

                                                //////////字符串分配容量//////////  

//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;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容