Objective-C字符串处理方法大全

在开发中,很多时候要进行字符串的使用和处理,简单的对字符串的处理进行了总结。

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] string1String2的内容相同

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://以字符串中的某个字符进行分割,返回数组对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值