Foundation框架---NSString 和 NSMutableString

objective-c的字符串可以分为两种

1.可变字符串:NSMutableString

2.不可变字符串:NSString

可变字符串和不可变字符串:

    //创建可变字符串
    NSMutableString *str = [NSMutableString stringWithString:@"abc"];
    NSLog(@"原先的str-->%@",str);
    //在字符串str后面接着添加字符串
    [str appendString:@"def"];
    NSLog(@"修改后的str-->%@",str);

输出的结果:
2015-03-12 23:16:56.055 博客1[3963:43666] 原先的str–>abc
2015-03-12 23:16:56.055 博客1[3963:43666] 修改后的str–>abcdef

以上讲解的就是可变字符串的特性,可以在原先的字符串后面接着添加字符串。而不可变字符串NSString就不能像以上那么灵活地更改字符串的内容。若NSString要实现以上NSMutableString的功能,可以用以下代码来实现:

    NSString *str = @"abc";
    NSLog(@"原先的str-->%@",str);
    str = [NSString stringWithFormat:@"%@%@",str,@"def"];
    NSLog(@"改变后的str-->%@",str);

输出结果:
2015-03-12 23:30:37.526 博客1[4395:49240] 原先的str–>abc
2015-03-12 23:30:37.527 博客1[4395:49240] 改变后的str–>abcdef

以上在一个字符串后面拼接另一个字符串,用NSString和NSMutableString都很容易实现,若在一个字符串的任意位置插入一个字符串呢?用可变字符串NSMutableString很容易实现,而用不可变字符串NSString并没有那么简单,可能需要自己写个算法来实现。

NSMutableString: -insertString: atIndex: //在指定位置插入字符串

    NSMutableString *Str = [[NSMutableString alloc] initWithString:@"This a NSMutableString"];
    NSLog(@"原先的str-->:%@",Str);
    [Str insertString:@"is " atIndex:5];
    NSLog(@"插入字符串后的str-->:%@",Str);

输出结果:
2015-03-13 00:03:49.239 博客1[5443:62167] 原先的str–>:This a NSMutableString
2015-03-13 00:03:49.240 博客1[5443:62167] 插入字符串后的str–>:This is a NSMutableString

字符串的创建

NSString字符串的创建

    NSString *str1 = [[NSString alloc] initWithString:@"chenfanfang"];
    NSString *str2 = [NSString stringWithString:@"chenfanfang"];
    NSString *str3 = @"chenfanfang";//推荐使用这种方法,xcode特性
    NSString *str4 = [[NSString alloc] initWithFormat:@"chenfanfang"];
    NSString *str5 = [NSString stringWithFormat:@"chenfanfang"];
    NSString *str6 = [NSString stringWithFormat:@"chenfanfang's age = %d",10];
    NSLog(@"str1-->%@",str1);
    NSLog(@"str2-->%@",str2);
    NSLog(@"str3-->%@",str3);
    NSLog(@"str4-->%@",str4);
    NSLog(@"str5-->%@",str5);
    NSLog(@"str6-->%@",str6);

输出结果
2015-03-12 21:56:47.933 博客1[1387:12193] str1–>chenfanfang
2015-03-12 21:56:47.934 博客1[1387:12193] str2–>chenfanfang
2015-03-12 21:56:47.934 博客1[1387:12193] str3–>chenfanfang
2015-03-12 21:56:47.935 博客1[1387:12193] str4–>chenfanfang
2015-03-12 21:56:47.935 博客1[1387:12193] str5–>chenfanfang
2015-03-12 21:56:47.935 博客1[1387:12193] str6–>chenfanfang’s age = 10

NSMutableString字符串的创建


    NSMutableString *str1 = [[NSMutableString alloc] initWithString:@"chenfanfang"];
    NSMutableString *str2 = [NSMutableString stringWithString:@"chenfanfang"];
    NSMutableString *str3 = @"chenfanfang";//推荐使用这种方法,xcode特性
    NSMutableString *str4 = [[NSMutableString alloc] initWithFormat:@"chenfanfang"];
    NSMutableString *str5 = [NSMutableString stringWithFormat:@"chenfanfang"];
    NSMutableString *str6 = [NSMutableString stringWithFormat:@"chenfanfang's age = %d",10];

    NSLog(@"str1-->%@",str1);
    NSLog(@"str2-->%@",str2);
    NSLog(@"str3-->%@",str3);
    NSLog(@"str4-->%@",str4);
    NSLog(@"str5-->%@",str5);
    NSLog(@"str6-->%@",str6);

输出结果:
2015-03-13 10:35:15.457 博客1[754:7942] str1–>chenfanfang
2015-03-13 10:35:15.458 博客1[754:7942] str2–>chenfanfang
2015-03-13 10:35:15.458 博客1[754:7942] str3–>chenfanfang
2015-03-13 10:35:15.458 博客1[754:7942] str4–>chenfanfang
2015-03-13 10:35:15.458 博客1[754:7942] str5–>chenfanfang
2015-03-13 10:35:15.458 博客1[754:7942] str6–>chenfanfang’s age = 10

—字符串与NSRange的配合使用

NSRange其实就是个结构体,官方定义为

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

//location代表:下标(比如字符串的下标)
//length代表:长度

—用NSRange找出一个字符串在另一个字符串中的位置和长度

    NSString *str1 = @"Good Good Study,Day Day Up";
    NSString *str2 = @"Study";
    NSRange range = [str1 rangeOfString:str2];
    NSLog(@"字符串str2在字符串str1中的位置:location=%d     length=%d",range.location,range.length);

输出结果:
2015-03-12 23:45:39.633 博客1[4870:55151] 字符串str2在字符串str1中的位置:location=10 length=5。

字符串的一些常用方法

—获取字符串的长度

    NSString *str = @"abcdef";
    int length = [str length];
    NSLog(@"字符串str的长度为:%d",length);

输出结果为:
2015-03-13 10:40:25.598 博客1[928:10206] 字符串str的长度为:6

[str length]对应的点语法为 str.length,代码如下

    NSString *str = @"abcdef";
    int length = str.length;
    NSLog(@"字符串str的长度为:%d",length);

输出结果为:
2015-03-13 10:42:34.179 博客1[1000:11240] 字符串str的长度为:6

—获取字符串中的字符

    NSString *str = @"abcdef";
    for (int i = 0; i < str.length; i++) {
        char c1 = [str characterAtIndex:i];
        NSLog(@"%c",c1);
    }

输出结果:
2015-03-13 10:46:31.069 博客1[1129:12672] a
2015-03-13 10:46:31.070 博客1[1129:12672] b
2015-03-13 10:46:31.070 博客1[1129:12672] c
2015-03-13 10:46:31.071 博客1[1129:12672] d
2015-03-13 10:46:31.071 博客1[1129:12672] e
2015-03-13 10:46:31.071 博客1[1129:12672] f

—替换字符串中的某些字符

    NSString *str = @"chenfanfang lov objective-c";
    NSLog(@"原先的str-->%@",str);
    //将字符串str中的lov替换成love
    str = [str stringByReplacingOccurrencesOfString:@"lov" withString:@"love"];
    NSLog(@"替换后的str-->%@",str);

输出结果:
2015-03-13 11:03:48.006 博客1[1756:19462] 原先的str–>chenfanfang lov objective-c
2015-03-13 11:03:48.008 博客1[1756:19462] 替换后的str–>chenfanfang love objective-c

—读取电脑中的文件的内容,写到字符串中

比如我电脑中有名称为 chenfanfang.txt文件,文件中的内容为:chenfanfang love objective-c 现在,我们要求取出chenfanfang.txt文件的内容,并且赋值给字符串

    NSString *path = @"/Users/admin/Desktop/chenfanfang.txt";
    //encoding:是字符编码的意思,若有中文,则用NSUTF8StringEncoding
    NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"%@",content);

输出结果:
2015-03-13 11:10:57.566 博客1[1975:22457] chenfanfang love objective-c

—将字符串内容写入到指定的文件中

    NSString *path = @"/Users/admin/Desktop/chenfanfang.txt";
    NSString *contents = @"love objective-c";
    //将字符串contents中的内容写入到chenfanfang.txt这个文件
    [contents writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];

你可能感兴趣的:(objective-c)