Objective-C学习- 字符串类型 NSString 和 NSMutableString

相比于C语言来讲,一般面向对象的语言都有一种类型来专门的处理字符串类型,如C++的string,JAVA的String..  Objectiver-C 自然也有种类型来专门处理字符串,叫做NSString。

  

 

 

  Objective-C中的字符串也分为两种:NSString(不可变字符串),NSMutableString(可变字符串),NSMutableString类是NSString的一个子类。

  注:Objective-C中的字符串 都需要用@"内容",前边必须要用一个@

  (1)NSString--------不可变字符串

    

//
//  main.m
//  NSString(不可变字符串)博客
//
//  Created by YueWen on 15/9/8.
//  Copyright (c) 2015年 YueWen. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {

    /**
     *  不可变字符串
     */
    
    /*字符串的基本的初始化,还有很多通过url,data,path等形式转化的字符串,这里不做过多的说明*/
    
    //objc方式的创建对象的普遍方法,init是NSObject的方法,几乎所有的类都是继承(以后会有博客来讲述一下继承)于NSObject 类
    NSString * s1 = [[NSString alloc] init];
    
    //一种和java 一样的创建对象的方法,刚从java 转过来的程序员会比较青睐与这种初始化
    NSString * s2 = [NSString new];
    
    //通过字符串s1来创建字符串s3对象
    NSString * s3 = [NSString stringWithString:s1];
    
    //这种方式叫做格式化创建,会将字符串变成你想要变成的格式
    NSString * s4 = [NSString stringWithFormat:@"我是第%d个学生!",2];
    
    //该方法是将 C语言的字符串 转成 objc 的 NSString 对象
    NSString * s5 = [NSString stringWithUTF8String:"RunIntoLove"];
    
    /*以下3种形式与s3,s4,s5的结果是一样的,只不过上面是用了便利构造器创建,下面使用了普通的便利初始化函数创建,效果是一样的*/
    
    //通过字符串s1来创建字符串s3对象
    NSString * s3_1 = [[NSString alloc ]initWithString:s1];
    
    //这种方式叫做格式化创建,会将字符串变成你想要变成的格式
    NSString * s4_1 = [[NSString alloc ]initWithFormat:@"我是第%d个学生!",2];
    
    //该方法是将 C语言的字符串 转成 objc 的 NSString 对象
    NSString * s5_1 = [[NSString alloc ]initWithUTF8String:"RunIntoLove"];
    
    //最基础的初始化
    NSString * s6 = @"RunIntoLove";
    
    
    /*常用方法*/
    
    /**
     *  获取s6的下标为2的字符,即第三个字符,c = 'n'
     */
    unichar c = [s6 characterAtIndex:2];
    
    /**
     *  获取s6的小标为3(包含小标为3的)开始以后的字符串
     *  结果是:s7 = IntoLove
     */
    NSString * s7 = [s6 substringFromIndex:3];

    
    /**
     *  获取从开头到下标为3(不包含下标为3)的字符串
     *  结果是:s8 = Run
     */
    NSString * s8 = [s6 substringToIndex:3];

    
    /**
     *  获取从下标为第某位开始,获取长度为多少的字符串
     *
     *  @param 2 表示从下标为2的字符开始
     *  @param 3 表示长度为3
     *  结果是:s9 = nIn
     *  @return 处理后字符串
     */
    NSString * s9 = [s6 substringWithRange:NSMakeRange(2, 3)];
    
    /**
     *  字符串的字符全部变为大写
     *  结果是 s11 = RUNINTOLOVE
     */
    NSString * s11 = [s6 uppercaseString];

    
    /**
     *  字符串的字符全部变为小写
     *  结果是 s12 = runintolove
     */
    NSString * s12 = [s6 lowercaseString];

    /**
     *  字符串中每个单词的首字母大写,其余的小写
     *  判断依据是空格
     *  结果是 s13 = Runintolove
     */
    NSString * s13 = [s6 capitalizedString];

    
    /**
     *  字符串比较,返回值是NSComparisonResult
     *  NSCompareisonResult 是一个结构体
     *  NSOrderedAscending 表示是升序,就是说s6小
     *  NSOrderedSame 表示是相等的
     *  NSOrderedDescending 表示是降序,就是说s6大
     *  示例返回的是 NSOrderedSame
     */
    NSComparisonResult  result = [s6 compare:@"RunIntoLove"];
    
    /**
     *  字符串比较,返回值是一个BOOL类型
     *  只用来描述是否相同
     *  实例返回的是YES
     */
    BOOL equal = [s6 isEqualToString:@"RunIntoLove"];
    
    /**
     *  字符串是否有 @"Run" 这个前缀
     *  示例返回值是YES
     */
    BOOL prefix = [s6 hasPrefix:@"Run"];

    /**
     *  字符串是否有 @“Love” 这个后缀
     *  示例返回值是YES
     */
    BOOL suffix = [s6 hasSuffix:@"Love"];

    /**
     *  字符串是否有 @“nIn” 这个子串
     *  示例返回值是YES
     */
    BOOL contain = [s6 containsString:@"nIn"];
    
    
    /**
     *  字符串中 @“Love” 的这个子串的位置
     *  返回的range
     *  loaction(即位置下标) = 7
     *  length (长度) = 4
     */
    NSRange range = [s6 rangeOfString:@"Love"];
    
    
    
    /*数字类型转换*/
    
    NSString * s10 = @"123";
    
    //转型成整型
    int a = [s10 intValue];
    NSInteger b = [s10 integerValue];
    long long c1 = [s10  longLongValue];
    
    //转型成浮点型
    float d = [s10 floatValue];
    double e = [s10 doubleValue];

    return 0;
}

   

 

  (2)NSMutableString-------可变字符串(因为 可变字符串  是继承于不可变字符串 所有上述方法 可变字符串依旧能用,但初始化有一种是不能定义的,下面会说)

//
//  main.m
//  NSMutableString(可变数组) 博客
//
//  Created by YueWen on 15/9/8.
//  Copyright (c) 2015年 YueWen. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {

    /**
     *  可变字符串
     */
    
    /* 初始化   大多数不可变字符串的初始化方法 可变字符串都有相应类似的初始化方法,在这里不再赘余  */
    
    //这种定义可变字符串的方法是错误的,objc的动态机制,会将mString1变成 不可变字符串 NSString
    NSMutableString * mString1 = @"RunIntoLove";
    
    //以下两种的初始化方法是相同的,只不过上面依旧是使用了 便利初始化 方法来初始化,  下面是用了 便利构造器 来完成初始化
    NSMutableString * mString2 = [[NSMutableString alloc] init];
    NSMutableString * mString3 = [NSMutableString string];
    
    //一种和java 一样的创建对象的方法,刚从java 转过来的程序员会比较青睐与这种初始化
    NSMutableString * mString4 = [NSMutableString new];
    
    //初始化时 设置元素的数为3  当然 这不重要  因为可变字符串是可以改变长度的
    NSMutableString * mString5 = [[NSMutableString alloc]initWithCapacity:3];
    NSMutableString * mString6 = [NSMutableString stringWithCapacity:3];
    
    
    //初始化一个可变字符串,用于后面的方法例子
    NSMutableString * mString7 = [NSMutableString stringWithString:@"RunIntoLove"];
    
    
    
    /*相比不可变字符串   
     *可变字符串的最大的优势 在于 他可以在自身进行变化
     *下面来说一下  常用的 可变字符串处理的方法
     */
    
    /**
     *  插入字符串
     *  在下标为3(包含)的位置 插入字符串 @"Run"
     *  执行方法之前:mString7 = @"RunIntoLove"
     *  执行方法之后:mString7 = @"RunRunIntoLove"
     */
    [mString7 insertString:@"Run" atIndex:3];

    /**
     *  指定位置删除字符串
     *  NSRange 是一个结构体
     *  方法里的表示 从第三个下标(包含)开始,删除长度为3的字符串
     *  执行方法之前:mString7 = @"RunRunIntoLove"
     *  执行方法之后:mString7 = @"RunIntoLove"
     */
    [mString7 deleteCharactersInRange:NSMakeRange(3, 3)];

    /**
     *  在字符串的后面追加字符串
     *  执行方法之前:mString7 = @"RunIntoLove"
     *  执行方法之后:mString7 = @"RunIntoLoveYES"
     */
    [mString7 appendString:@"YES"];
    
    /**
     *  在字符串的后面追加格式化的字符串
     *  执行方法之前:mString7 = @"RunIntoLoveYES"
     *  执行方法之后:mString7 = @"RunIntoLoveYES8"
     */
    [mString7 appendFormat:@"%d",8];
    
    /**
     *  为字符串重新设置值
     *  执行方法之前:mString7 = @"RunIntoLoveYES8"
     *  执行方法之后:mString7 = @"YueWen"
     */
    [mString7 setString:@"YueWen"];
    
    /**
     *  将字符串中的某段字符串替换
     *  表示将下标为3开始,长度为3的字符串 被 后面的替换掉
     *  执行方法之前:mString7 = @"YueWen"
     *  执行方法之后:mString7 = @"YueRunIntoLove"
     */
    [mString7 replaceCharactersInRange:NSMakeRange(3, 3) withString:@"RunIntoLove"];

    return 0;
}

  

   

  //字符串与数据的应用

  例如:

  NSString *str = @"This is my OBjective-C Project!";

  NSArray *arr = [str componentsSeparatedByString:@" "];//意思是用空格来分割字符串,并将值存入数组

  NSString *str1 =[arr componentsJoinedByString:@" "];//意思是将数组用" "连接起来

 

你可能感兴趣的:(Objective-C学习- 字符串类型 NSString 和 NSMutableString)