相比于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:@" "];//意思是将数组用" "连接起来