黑马程序员———Objctive-C———【NSString及NSMutalbeString的使用】

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

——————————————————————————————————————————————————————————————————

compare方法返回的结果有三种:NSOrderedAscending,NSOrderedSame,NSorderedDescending.
str   >   str2  ,  NSOrderedDescending   1
str   <   str2  ,  NSOrderedAscending   -1
str   =   str2  ,  NSOrderedSame             0
NSString *str=@"abc";
NSString *str2=@"bcd";
NSComparisonResult result=[str compare:str2];
switch(result){
     case NSOrderedDescending:
         NSLog(@" str < str2 ");
     case NSOrderedSame
         NSLog(@" str = str2 ");
     case NSorderedDescending
         NSLog(@" str > str2 ");
}
另外,在使用compare方法时可以添加参数来决定是否区分大小写,或者声明为比较字符串个数而不是字符值等比较条件
常见的有3个

NSCaseInsensitiveSeaich:不区分大小写字符
NSLiteralSearch:进行完全比较,区分大小写
NSNumbericSearch:比较字符串的字符个数,而不是字符值,例:
NSComparisonResult result=[str compare:str2 options:NSCaseInsensitiveSeaich];

另外,还有|的应用,例:
NSComparisonResult result=[str compare:str2 options:NSCaseInsensitiveSeaich|NSNumbericSearch]; 
表示既不区分大小写同时比较字符的个数


(1)判断字符串前缀
    如:判断地址是否是网址
        file://
        ftp://
        https://
        http://
    检查字符串是否以另一个字符串开头
        - (BOOL) hasPrefix:(NSString *) aString;
NSString *url=@"htt://www.baidu.com";
if([url hasPrefix:@"http:"]){
NSLog("这是一个网址");
}else{
NSLog("这不是一个网址.");
}
(2)判断字符串后缀
    如:判断地址是否是图片
        xxxx.jpg
        xxxx.png
        xxxx.gif
        xxxx.jpeg
    检查字符串是否以另一个字符串结尾
        - (BOOL) hasPrefix:(NSString *) aString;
    NSString *url=@"photo.jpg";
    if([url hasPrefix:@".jpg"]){
        NSLog("这是一个图片");
    else{
        NSLog("这不是一个图片.");
    }

字符串的查找:查找一个字符串在另一个字符串首次出现的位置,以及该字符串的所占长度
查找str中首次出现str2的位置,即[str rangeOfString:str2];
返回值是NSRange类型,是一个结构体类型,包含两个结构体变量,NSUInteger类型的location及length
如果查找不到,返回的location是一个特别大的数(NSNotFound),length是0
NSNotFound  =  NSIntegerMax  =  Long_Max  一个最大的long类型的数 

NSString *str=@"dasfiosfsdafsdiossf";
NSString *str2=@"ios";
NSRange range=[str rangeOfString:str2];
if(range.location!=NSNotFound){
    NSLog(@"location=%lu,length=%lu",range.location,range.length);
}else{
    NSLog(@"str中没有找到这个str2");
}

NSRange用来表示一个范围,location表示起始位置,length表示长度.
typedef unsigned int NSInteger;  起别名
typedef unsigned long NSUInteger;  起别名

typedef struct _NSRange{
    NSUInteger location;
    NSUInteger length;
} NSRange;

C中创建Range的方法:给结构体赋值的方法.

OC中创建Range的方法:Range r=NSMakeRange(3,3);  底层就是给结构体变量赋值.
访问方法:NSLog(@"%ld,%ld",r.location,r.length);
打印的是:3,3

把NSRange转换成NSString类型:NSStringFromRange(NSRange r);
访问方法:NSLog(NSStringFromRange(NSRange r));
打印的是:{3,3}

(1)字符串的截取
- (NSString *)subStringFromIndex:(NSUInteger)from;
从指定位置from开始(包括指定位置的字符)到尾部.

- (NSString *)subStringToIndex:(NSUInteger)to;
从字符串的开头一直截取到指定的位置to,但不包括该位置的字符

- (NSString *)subStringWithRange:(NSRange)range;
按照所给出的NSRange从字符串中截取子字符串

(2)字符串的替换
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *) replacement;
用replacement替换target,返回一个新字符串.
记忆技巧:stringByReplacingOccurrencesOfString中提到occurrent即当前的字符串,即原字符串.

获取字符串的字符
- (NSUInteger)length;
返回字符串的长度(有多少个字符,无论中文字符、英文字符等等,一个字符就是一个字符)

- (unichar)characterAtIndex:(NSUInteger)index;
返回index位置对应的字符

字符串和其他数据类型转换
字符串转为基本数据类型
- (double)doubleValue;
- (float)floatValue;
- (int)intValue;

OC字符串和C的字符串互相转换
(1)C -> OC
char *s="zhangsan";
NSString *str=[NSString stringWithURF8String:s];
NSLog(@"%@",str);

(2)OC -> C
NSString *str2=@"zbz";
char *s1=[str2 UTF8String];

字符串去除空格
去除所有的空格
[str stringByReplacingOccurrencesOfString:@" " witString:@""];

去除首尾的空格
[str stringByTrimingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
首字母变大写,其余小写。如果有多个单词也是这样
-(NSString *)capitalizedSting;

[str stringbyTrimingCharactersInSet:[NSCharacterSet *]];以下的使用该种调用方式
去掉头尾空格
+(id)whitespaceCharacter;
去掉头尾的小写字母
+(id)lowercaseLetterCharacterSet;
去掉头尾的大写字母
+(id)uppercaseLetterCharacterSet;
去掉头尾的指定字符串
+(id)characterSetWithChatactersInString:(NSString *)aString;

NSMutableString
NSMutable和NSString的区别
NSString是不可变的,空间地址、空间大小和文字内容都不能变
NSMutableString,空间地址不变,空间大小和文字内容可变

NSMutableString能使用NSString的所有方法
常用方法
- (void)appendString:(NSString *)aString; 追加字符串

- (void)appendFormat:(NSString *)format,...; 追加格式化字符串
NSMutableString *str=[NSMutableString string];
[str appendFormat:@"http://%d",1];
NSLog(@"%@",str);

- (void)deleteCharactersInRange:(NSRange)range; 删除指定范围的字符
- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc; 在loc这个位置中插入aString
- (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString; 替换字符串一部分内容

注意事项
(1)给可变的字符串赋值一个不可变的值
NSMutableString *str=@"abc";
[str appendString:@"xxx"];

(2)NSMutableString的string属性:会将源对象的所有字符串都覆盖掉(.string属性把原来的内容覆盖了)
NSMutableString *str=[NSMutableString stringWithFormat:@"abc"];
str.string=@"";
[str appendString:@"xxxx"];
NSLog(@"%@",str); //输出xxxx

(3)开发中到底使用NSString还是NSMutableString?
开发中绝大多数用到的是NSString
只是如果需要做特殊处理的时候(截取、拼接、替换)等操作,才考虑使用NSMutableString

(4)位枚举
NSString *s1=@"hello"
; NSRange range=[s1 rangeOfString:@"o" options:0 range:NSMakeRange(0,5)];
如果想使用rangeofString中的range,但是options的条件还不想给它赋值,就可以用0来赋值。这就是位枚举的好处。

你可能感兴趣的:(黑马程序员———Objctive-C———【NSString及NSMutalbeString的使用】)