zoukankan      html  css  js  c++  java
  • Objective-C: 字符串NSString与NSMutableString

          字符串算是OC中非常重要和常用的一部分内容,OC中的字符串与我之前在学习C,C++,Java中的字符串有一定的不同,它非常类似于C++中容器的概念,但用法却与之还是有很大的不同,也许是因为OC的语法就与其他我们常用的编程语言不尽相同。

           这里总结一下字符串NSString与NSMutableString。

    一. NSString

          NSString代表字符序列不可变的字符串,NSString的功能非常强大,OC的字符串处理比C语言的饿字符串简单、易用得多。

          这里我们通过一个具体的例子来进行分析。

          创建两个字符串对象: 

    NSString *str1 = @"this is string A";
    NSString *str2 = @"this is string B";

          计算字符串中的字符个数

    NSLog(@"Length of str1 : %lu" , [str1 length]);

         利用stringWithString 将一个字符串复制到另一个字符串:

    res = [NSString stringWithString : str1];
    NSLog(@"copy : %@" , res);

         stringByAppendingString,将一个字符串复制到另一个字符串的末尾:

    str2 = [str1 stringByAppendingString:str2];

          isEqualToNumber : 方法比较两个NSNumber对象的数值。程序会返回一个BOOL值,查看这两个值是否相等。

          isEqualToString,判断两个字符串是否相等:

    if([str1 isEqualToString: res] == YES)
                NSLog(@"str1 == res");
    else
                NSLog(@"str1 != res");

         compare : 方法测试一个值是否在数值上小于、等于或大于另一个值。
          如: [intNumber compare : myNumber]
          若intNumber 小于 myNumber ,返回NSOrderedAscending ;
                               相等                    ,返回NSOrderdSame;
                               大于                    ,返回NSOrderdDescending

           //验证一个字符串是否小于、等于或大于另一个字符串
            compareResult = [str1 compare: str2];
            
            if(compareResult == NSOrderedAscending)
                NSLog(@"str1 < str2");
            else if(compareResult == NSOrderedSame)
                NSLog(@"str1 == str2");
            else
                NSLog(@"str1 > str2");

            uppercaseString,将字符串转换为大写。

            lowercaseString,将字符串转换为小写。

            //将字符串转换为大写
            res = [str1 uppercaseString];
            
            //将字符串转换为小写
            res = [str1 lowercaseString];
           

    示例代码如下:

     1 //
     2 //  main.m
     3 //  stringTest
     4 //
     5 //  Created by heyonggang on 13-12-4.
     6 //  Copyright (c) 2013年 MiracleHe. All rights reserved.
     7 //  基本的字符串操作
     8 
     9 #import <Foundation/Foundation.h>
    10 
    11 int main(int argc, const char * argv[])
    12 {
    13 
    14     @autoreleasepool {
    15         
    16         // insert code here...
    17         //NSLog(@"Hello, World!");
    18         NSString *str1 = @"this is string A";
    19         NSString *str2 = @"this is string B";
    20         NSString *res;
    21         NSComparisonResult compareResult;
    22         
    23         //计算字符串中的字符
    24         NSLog(@"Length of str1 : %lu" , [str1 length]);
    25         
    26         //将一个字符串复制到另一个字符串
    27         res = [NSString stringWithString : str1];
    28         NSLog(@"copy : %@" , res);
    29         
    30         //将一个字符串复制到另一个字符串的末尾
    31         str2 = [str1 stringByAppendingString:str2];
    32         NSLog(@"concatentation: %@" , str2);
    33         
    34         //验证两个字符串是否相等
    35         if([str1 isEqualToString: res] == YES)
    36             NSLog(@"str1 == res");
    37         else
    38             NSLog(@"str1 != res");
    39         
    40         //验证一个字符串是否小于、等于或大于另一个字符串
    41         compareResult = [str1 compare: str2];
    42         
    43         if(compareResult == NSOrderedAscending)
    44             NSLog(@"str1 < str2");
    45         else if(compareResult == NSOrderedSame)
    46             NSLog(@"str1 == str2");
    47         else
    48             NSLog(@"str1 > str2");
    49         
    50         //将字符串转换为大写
    51         res = [str1 uppercaseString];
    52         NSLog(@"uppercase conversion : %s" , [res UTF8String]);
    53         
    54         //将字符串转换为小写
    55         res = [str1 lowercaseString];
    56         NSLog(@"lowercase conversion : %@" , res);
    57         
    58         NSLog(@"original string : %@" , str1);       
    59     }
    60     return 0;
    61 }
    代码清单

           stringByAppendingString,在字符串后面添加固定的字符串:

    str = [str stringByAppendingString:@", iOS!"];

           substringToIndex,获取str的前10个字符组成的字符串:

    substringToIndex:方法创建了一个子字符串,包括首字符都指定的索引数,但不包括这个字符。因为索引数是从0开始的,所以参数3表示从字符串中提取0、1、2,并返回结果字符串对象。对于所有采用索引数作为参数的字符串方法,如果提供的索引数对该字符串无效,就会获得Range or index out of bounds的出错信息。

            //获取str的前10个字符组成的字符串
            NSString *s1 = [str substringToIndex:10];
            NSLog(@"%@" , s1);

          substringFromIndex,获取str从第5个字符开始,与后面字符组成的字符串:

            //获取str从第5个字符开始,与后面字符组成的字符串
            NSString *s2 = [str substringFromIndex:5];
            NSLog(@"%@" , s2);

          获取str从第5个字符开始,到第15个字符组成的字符串:

            //获取str从第5个字符开始,到第15个字符组成的字符串
            NSString *s3 = [str substringWithRange:NSMakeRange(5, 15)];
            NSLog(@"%@" , s3);

          rangeOfString , 获取ios在str中出现的位置:

            //获取iOS在str中出现的位置
            NSRange pos = [str rangeOfString:@"iOS"];
            NSLog(@"ios在str中出现的开始位置:%ld , 长度为:%ld" , pos.location , pos.length);

    示例代码如下:

     1 #import <Foundation/Foundation.h>
     2 
     3 int main(int argc, const char * argv[])
     4 {
     5 
     6     @autoreleasepool {
     7         
     8         NSString *str = @"Hello ";
     9         NSString *book = @"我要学好iOS";
    10         
    11         //在str后面追加固定的字符串
    12         //原来的字符串对象并不改变,只是将新生成的字符串重新赋给str指针变量
    13         str = [str stringByAppendingString:@", iOS!"];
    14         NSLog(@"%@" , str);
    15         
    16         //获取字符串对应的C风格字符串
    17         const char *cstr = [str UTF8String];
    18         NSLog(@"获取的c字符串:%s" , cstr);
    19         
    20         //在str后面追加带变量的字符串
    21         //原来的字符串对象并不改变,只是将新生成的字符串重新赋给str指针变量
    22         str = [str stringByAppendingFormat:@"%@是非常重要的事情。" , book];
    23         NSLog(@"%@" , str);
    24         NSLog(@"str的字符个数:%lu" , [str length]);
    25         
    26         //获取str的前10个字符组成的字符串
    27         NSString *s1 = [str substringToIndex:10];
    28         NSLog(@"%@" , s1);
    29         
    30         //获取str从第5个字符开始,与后面字符组成的字符串
    31         NSString *s2 = [str substringFromIndex:5];
    32         NSLog(@"%@" , s2);
    33         
    34         //获取str从第5个字符开始,到第15个字符组成的字符串
    35         NSString *s3 = [str substringWithRange:NSMakeRange(5, 15)];
    36         NSLog(@"%@" , s3);
    37         
    38         //获取iOS在str中出现的位置
    39         NSRange pos = [str rangeOfString:@"iOS"];
    40         NSLog(@"ios在str中出现的开始位置:%ld , 长度为:%ld" , pos.location , pos.length);
    41         
    42     }
    43     return 0;
    44 }
    代码清单

    二. NSMutableString

          NSMutableString对象代表一个字符序列可变的字符串,而且NSMutableString是NSString的子类,因此前面介绍的NSString所包含的方法,NSMutableString都可以直接使用,NSMutableString对象也可直接当成NSString对象使用。

          stringWithString,用不可变字符串创建可变字符串:

            //从不可变字符串创建可变字符串
            mstr = [NSMutableString stringWithString:str1];
            NSLog(@"%@" , mstr);

           insertString,插入字符:

            //插入字符
            [mstr insertString:@"mutable" atIndex:7];
            NSLog(@"%@" , mstr);

          insertString:  atIndex:   ,插入末尾进行有效拼接:

            //插入末尾进行有效拼接
            [mstr insertString:@" and string B" atIndex:[mstr length]];
            NSLog(@"%@" , mstr);

          deleteCharactersInRange:NSMakeRange() , 根据范围删除子字符串:

            //根据范围删除子字符串
            [mstr deleteCharactersInRange: NSMakeRange(16, 13)];
            NSLog(@"%@" , mstr);

          查找然后直接删除

            //查找然后将其删除
            substr = [mstr rangeOfString:@"string B and "];
            
            if(substr.location != NSNotFound){
                [mstr deleteCharactersInRange:substr];
                NSLog(@"%@" , mstr);
            }

     示例代码如下:

     1 #import <Foundation/Foundation.h>
     2 
     3 int main(int argc, const char * argv[])
     4 {
     5 
     6     @autoreleasepool {
     7         
     8         // insert code here...
     9         //NSLog(@"Hello, World!");
    10         
    11         NSString *str1 = @"this is string A";
    12         NSString *search , *replace;
    13         NSMutableString *mstr;
    14         NSRange substr;
    15         
    16         //从不可变字符串创建可变字符串
    17         mstr = [NSMutableString stringWithString:str1];
    18         NSLog(@"%@" , mstr);
    19         
    20         //插入字符
    21         [mstr insertString:@"mutable" atIndex:7];
    22         NSLog(@"%@" , mstr);
    23         
    24         //插入末尾进行有效拼接
    25         [mstr insertString:@" and string B" atIndex:[mstr length]];
    26         NSLog(@"%@" , mstr);
    27 
    28         
    29         //直接使用appendString
    30         [mstr appendString:@" and string C"];
    31         NSLog(@"%@" , mstr);
    32         
    33         //根据范围删除子字符串
    34         [mstr deleteCharactersInRange: NSMakeRange(16, 13)];
    35         NSLog(@"%@" , mstr);
    36         
    37         //查找然后将其删除
    38         substr = [mstr rangeOfString:@"string B and "];
    39         
    40         if(substr.location != NSNotFound){
    41             [mstr deleteCharactersInRange:substr];
    42             NSLog(@"%@" , mstr);
    43         }
    44         
    45         
    46         //直接设置为可变的字符串
    47         [mstr setString:@"this is string A"];
    48         NSLog(@"%@" , mstr);
    49         
    50         //替换一些字符
    51         [mstr replaceCharactersInRange:NSMakeRange(8, 6) withString:@" a mutable string"];
    52         NSLog(@"%@" , mstr);
    53         
    54         //查找和替换
    55         search = @"this is";
    56         replace = @"an example of";
    57         
    58         substr = [mstr rangeOfString:search];
    59         
    60         if(substr.location != NSNotFound){
    61             [mstr replaceCharactersInRange:substr withString:replace];
    62             NSLog(@"%@" , mstr);
    63         }
    64         
    65         //查找和替换所有的匹配项
    66         search = @"a";
    67         replace = @"X";
    68         
    69         substr = [mstr rangeOfString:search];
    70         
    71         while (substr.location != NSNotFound) {
    72             [mstr replaceCharactersInRange:substr withString:replace];
    73             
    74         }
    75         
    76         NSLog(@"%@" , mstr);
    77         
    78     }
    79     return 0;
    80 }
  • 相关阅读:
    北京南天软件java工程师面试题
    祝福自己
    致青春——IT之路
    PL/SQL devloper 常用设置
    CENTOS LINUX查询内存大小、频率
    centOS安装openoffice
    echo > 和 echo >>的区别
    sqoop job 增量导入
    sqoop job从创建到执行
    sqoop导入增量数据
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3463932.html
Copyright © 2011-2022 走看看