您的位置:首页 > 移动开发 > Objective-C

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

2015-08-04 15:12 661 查看
相比于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:@" "];//意思是将数组用"
"连接起来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: