• 0bjective-c 之 NSString 使用详解


    一个基本的该类型字符串例子:

    @"This is a constant character string object";

    在后台显示它:

    NSLog (@"%@", @"This is a constant character string object");

    得到其长度:

    int len = [@"Hello" length];

    NSLog (@"Length of string = %i", len);

    结果是:

    Length of string = 5

    注意,空格也算一个。只是这个例子里没有而已。

    创建可变或者不可变的字符串:

    OBJ-C的字符串分为 mutable and immutable两种(可变和不可变)我们通常声明的 NSString是不可变的,一旦创建你休想用任何方式改变它!例如:

    NSString *string1 = @"This string is immutable";

    可变字符串是可以有很多方法可以用的,但是我们不能像刚才那样直接赋值,而是必须采用复制的方式来弄,例如:

    NSMutableString *string2 = [NSMutableString stringWithString:@"This string is mutable"];

    如果你想改变不可见字符串,那么只有一个办法,那就是再声明一个可变的字符串,然后把内容复制进入,例如:

    NSString *string1 = @"This is a string";

    NSMutableString *string2;

    string2 = [NSMutableString stringWithString: string1];

    复制一个字符串:

    如果是INT类型我们大可以这样做:

    int a = 10;

    int b;

    a = b;

    但是对于字符串来说我们用下面这种做法是很愚蠢的:

    NSMutableString *string1;

    NSMutableString *string2;

    string1 = [NSMutableString stringWithString: @"This is a string"];

    string2 = string1;

    定义的字符串变量都是指针,上面这种赋值方式只是让两个字符串指向同一块内存而已,所以我们测试一下就知道了:

    NSMutableString *string1;

    NSMutableString *string2;

    string1 = [NSMutableString stringWithString: @"This is a string"];

    string2 = string1;

    [string2 appendString: @" and it is mine!"];

    NSLog (@"string1 = %@", string1);

    NSLog (@"string2 = %@", string2);

    结果果然是这样的:

    2009-11-03 14:35:37.731 t[32239:10b] string1 = This is a string and it is mine!

    2009-11-03 14:35:37.732 t[32239:10b] string2 = This is a string and it is mine!

    所以我们必须使用下面的方法来复制:

    NSMutableString *string1;

    NSMutableString *string2;

    string1 = [NSMutableString stringWithString: @"This is a string"]; // Initialize string1

    string2 = [NSMutableString stringWithString: string1]; // Copy string1 object to string2

    [string2 appendString: @" and it is mine!"]; // Modify string2

    NSLog (@"string1 = %@", string1);

    NSLog (@"string2 = %@", string2);

    让我们来看一下结果吧,没有问题了:

    2009-11-03 14:42:10.426 t[32263:10b] string1 = This is a string

    2009-11-03 14:42:10.427 t[32263:10b] string2 = This is a string and it is mine!

    对字符串进行检索:

    我们可以使用 rangeOfString method 来对字符串进行检索 这个方法返回一个 NSRange 类型的变量,下面我们来看具体使用例子:

    NSString *string1 = @"The quick brown fox jumped";

    NSRange match;

    match = [string1 rangeOfString: @"brown fox"];

    NSLog (@"match found at index %i", match.location);

    NSLog (@"match length = %i", match.length);

    location 的意思就是所寻找的字符串的起始位置,注意是从0开始数而不是1,length 就是找到的这个字符串有多长,这个是从1开始数的,所以我们可以知道上面的例子中location 的值是10,而length的值是9。

    如果没有找到,系统会给location 设置成NSNotFound下面是个例子:

    NSString *string1 = @"The quick brown fox jumped";

    NSRange match;

    match = [string1 rangeOfString: @"brown dog"];

    if (match.location == NSNotFound)

              NSLog (@"Match not found");

    else

              NSLog (@"match found at index %i", match.location);

    替换字符串的某一部分:

    我们可以用replaceCharactersInRange方法来替换字符串的某一部分,它需要2个参数,第一个参数是一个NSRange类型的,它必须指出我们从哪个坐标开始替换,以及替换几个字母,我们可以利用NSMakeRange来方便的搞定这个参数,第二个参数就是我们具体要替换的字符串了,下面是例子:

    NSMutableString *string1 = [NSMutableString stringWithString: @"The quick brown fox jumped"];

    [string1 replaceCharactersInRange: NSMakeRange(16, 3) withString: @"squirrel"];

    NSLog (@"string1 = %@", string1);

    替换成功了,我们替换的新字符串不一定和以前的一样长,替换之后它会自动调整长度的。

    检索与替换配合使用:

    我们可以把以上两个方法放在一起用,这样我们就不用去数数了,很方便的,看例子吧:

    NSMutableString *string1 = [NSMutableString stringWithString: @"The quick brown fox jumped"];

    [string1 replaceCharactersInRange: [string1 rangeOfString: @"brown fox"] withString: @"black dog"];

    我们得到的结果是: "The quick black dog jumped".

    删除字符串的一部分:

    这个方法的使用方法和上面差不多,我们依然可以使用 rangeOfString方法来帮助它,看例子:

    NSMutableString *string1 = [NSMutableString stringWithString: @"The quick brown fox jumped"];

    [string1 deleteCharactersInRange: [string1 rangeOfString: @"jumped"]];

    提取出字符串的一部分:

    使用substringWithRange方法就可以做到这些了,它只需要你提供你希望提取的位置和长度即可:

    NSMutableString *string1 = [NSMutableString stringWithString: @"The quick brown fox jumped"];

    NSString *string2;

    string2 = [string1 substringWithRange: NSMakeRange (4, 5)];

    NSLog (@"string2 = %@", string2);

    我们的结果自然是:quick

    我们还可以使用 subStringFromIndex方法来得到制定位置之后所有的字符串,我们只需要提供一个位置参数:

    NSMutableString *string1 = [NSMutableString stringWithString: @"The quick brown fox jumped"];

    NSString *string2;

    string2 = [string1 substringFromIndex: 4];

    结果是什么就不用说了吧,很简单。

    在字符串中插入一段文本:

    有了上面的基础,直接看例子就可以明白了:

    NSMutableString *string1 = [NSMutableString stringWithString: @"The quick brown fox jumped"];

    [string1 insertString: @"agile, " atIndex: 4];

     

    在字符串最后添加一段文本:

    直接看例子:

    NSMutableString *string1 = [NSMutableString stringWithString: @"The quick brown fox jumped"];

    [string1 appendString: @" over the lazy dog"];

    NSLog (@"string1 = %@", string1);

     

    连接两个字符串:

    NSString* string; // 结果字符串

    NSString* string1, string2; //已存在的字符串

    1. string = [NSString initWithFormat:@"%@,%@", string1, string2 ];

    2. string = [string1 stringByAppendingString:string2];</p>

    3 . string = [string stringByAppendingFormat:@"%@,%@",string1, string2];

    比较两个字符串:

    我们要比较两个字符串是否相等,看看下面的例子:

    NSString *string1 = @"My String";

    NSString *string2 = @"My String";

    if (string1 == string2)

            NSLog (@"Strings match");

    else

            NSLog (@"Strings do not match");

    请一定不要这样做,这样比较的是两个字符串指向的是否是同一块内存,而并不是他们的字符是否相等,所以上面的例子答案是不相等的,那么我们应该按照下面这样做才是正确的:

    NSString *string1 = @"My String";

    NSString *string2 = @"My String 2";

    if ([string1 isEqualToString: string2])

            NSLog (@"Strings match");

    else

            NSLog (@"Strings do not match");

    查看字符串的前缀和后缀:

    我们用 hasPrefix 和 hasSuffix 方法来查看字符串的前后缀,它们返回一个BOOLEAN类型的变量告诉我们字符串的前后缀到底是不是我们输入的字母,下面是例子:

    NSString *string1 = @"The quick brown fox jumped";

    BOOL result;

    result = [string1 hasPrefix: @"The"];

    if (result)

            NSLog (@"String begins with The");

     

    result = [string1 hasSuffix: @"dog"];

    if (result)

            NSLog (@"String ends with dog");

    转换大小写:

    •   单词首字母大写:

    NSString *string1 = @"The quicK brOwn fox jumpeD";

    NSString *string2;

    string2 = [string1 capitalizedString];

    结果是 "The Quick Brown Fox Jumped" .

    •   全部小写

    NSString *string1 = @"The quicK brOwn fox jumpeD";

    NSString *string2;

    string2 = [string1 lowercaseString];

    结果是 "the quick brown fox jumped".

    •   全部大写

    NSString *string1 = @"The quicK brOwn fox jumpeD";

    NSString *string2;

    string2 = [string1 uppercaseString];

    结果是 "THE QUICK BROWN FOX JUMPED".

    以上例子改变的都是string2,而string1仍然保持原样不变。

    把字符串转成数字类型:

    直接看例子就可以明白了:

    •   转换为 int

    NSString *string1 = @"10";

    int myInt = [string1 intValue];

    NSLog (@"%i", myInt);

    •   转换为 double

    NSString *string1 = @"10.1092";

    double myDouble = [string1 doubleValue];

    NSLog (@"%f", myDouble);

    •   转换为 float

    NSString *string1 = @"10.1092";

    float myFloat = [string1 floatValue];

    NSLog (@"%f", myFloat);

    •   转换为 NSInteger

    NSString *string1 = @"10";

    NSInteger myInteger = [string1 integerValue];

    NSLog (@"%li", myInteger);

    把字符串转换为 ASCII 码:

    例子如下:

    NSString *string1 = @"The quick browen fox";

    const char *utfString = [string1 UTF8String];

    printf ("Converted string = %s ", utfString);

  • 相关阅读:
    如何解决列表框控件宽度不够的问题
    SQL Server 2005的服务器角色(public)的问题
    使用多结果集读取数据减少服务器往返,提高性能
    SQL SERVER的单用户模式以及专用管理员连接
    SQL Server错误严重性级别和异常处理
    使用TransactionScope做分布式事务协调
    通过编程为Outlook 2007添加邮件规则
    微软中国的相关研发团队 交流平台
    有关连接字符串的一些细节
    Web Application和Web Site两个模板的比较
  • 原文地址:https://www.cnblogs.com/ejllen/p/3735365.html
Copyright © 2020-2023  润新知