OC第二节 —— NSString和NSMutableString
1.为什么需要NSString对象
答:在OC中创建字符串时,一般不使用C的方法,
因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,
在Cocoa中NSString集成的一些方法,可以很方便的操作字符串,
2.oc中字符串和c语言字符串的对比
“hello world”
@“hello world”
1)输出方式 %@
2)引用方式
NSString以@符号开头,表示该字符串是一个oc类型的字符串
c语言字符串则没有@开头
3.c语言字符串和NSString的转换
1)stringWithCString:encoding:消息
作用:将c字符串按照指定的编码方式转换为oc字符串对象
NSString *str2 = [NSString stringWithCString:cstr encoding:
NSUTF8StringEncoding];
2)UTF8String消息
作用:将NSString对象按照UTF8编码转换为c字符串
并且转换的结果为一个const char *类型字符串
const char *cstr2 = [str2 UTF8String];
输出方式:要使用printf才可以输出
3)什么是字符编码
是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。即在符号集合与数字系统之间建立对应关系。
常见的字符编码: ASCII \ GB18030\UNICODE
Unicode :在计算机科学领域中,Unicode(统一码、万国码、单一码、标准万国码)是业界的一种标准,它可以使电脑得以体现世界上数十种文字的系统。直至目前为止的第六版,Unicode 就已经包含了超过十万个字符。
Unicode是字符集,UTF-32/ UTF-16/ UTF-8 是三种字符编码方案。
UTF-32:使用4字节的数字来表达每个字母、符号,或者表意文字(ideograph)
UTF-16: 每个字符只需要2个字节来存储,如果超出0~65535,则采取诡异的 技巧来实现。
UTF-8: UTF-8是一种针对Unicode的可变长度的编码,使用一至四个字节为 每个字符编码。它逐渐成为电子邮件、网页及其他存储或传送文字的 应用中,优先采用的编码。互联网工程工作小组(IETF)要求所有 互联网协议都必须支持UTF-8编码。
4.NSString的创建方式
NSString *str =@"ios"; //创建不可变字符串
//实例化方法创建字符串
//用一个OC常量字符串初始化一个OC的字符串对象
- (instancetype)initWithString:(NSString *)aString;
- (instancetype)initWithFormat:(NSString*)format,…;
- (instancetype)initWithUTF8String:(const char *)bytes;
//类方法创建字符串
+ (instancetype)stringWithString:(NSString*)aString;
+ (instancetype)stringWithFormat:(NSString *)format,…;
+ (instancetype)stringWithUTF8String:(const char *)bytes;
NSString的常用方法:
1、求字符串的长度
- (NSUInteger)length;
2、通过索引获取相应的字符
- (unichar)characterAtIndex:(NSUInteger)index;
3、字符串的比较
3.1 比较两个字符串是否相等
//isEqualToString: 消息
回忆:c语言中如何比较两个字符串是否相等
- (BOOL)isEqualToString:(NSString *)aString;
//compare: 消息
3.2 比较两个字符串的大小
- (NSComparisonResult)compare:(NSString *)aString;
3.3 不区分大小写进行比较
//compare: option
- (NSComparisonResult)compare:(NSString *)aString options:
NSCaseInsensitiveSearch;
//caseInsensitiveCompare:消息
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString;
4、字符串查找
1) rangeOfString消息
- (NSRange)rangeOfString:(NSString *)aString;
作用:查找指定字符串是否在目标字符串中,返回NSRange
结构体。
location,
length
如果存在,返回的NSRange中会包含起始位置和长度
如不存在,NSRange.location == NSNotFound
练习:1.查找"Hi, I am fine,and you"中"fine"字符串的位置
5、判断前后缀
- (BOOL)hasPrefix:(NSString *)aString;
- (BOOL)hasSuffix:(NSString *)aString;
6、数字串转化为数字
- (double)doubleValue;
- (float)floatValue;
- (int)intValue;
- (NSInteger)integerValue;
- (long long)longlongValue;
7、大小写转化
- (NSString *)uppercaseString;
- (NSString *)lowercaseString;
8、字符串提取
1)substringFromIndex消息
作用:从指定位置开始向后提取字符串,返回字符串地址,闭区间
2)substringToIndex消息
作用:提取从开头到指定位置的字符串,返回字符串地址,开区间
#import <Foundation/Foundation.h> int main(int argc, const char * argv[])
{ @autoreleasepool { NSString *ocStr = @"iOS"; //1. 求字符串的长度
NSUInteger len = [ocStr length];
NSLog(@"len = %lu", len); //3 //2. 通过索引获取字符
//ocStr[0]; OC字符串不可以使用下标
unichar C = [ocStr characterAtIndex:0];
//unichar 的格式转换符 %C
NSLog(@"C = %C", C); //3.字符串的比较
NSString *ocStr1 = @"hello";
NSString *ocStr2 = @"hellO"; //------比较两个字符串是否相等-------
//isEqualToString:
BOOL ret = [ocStr1 isEqualToString:ocStr2];
if (ret == YES) {
NSLog(@"ocStr1 == ocStr2");
} else {
NSLog(@"ocStr1 != ocStr2");
} /*
typedef enum
{
NSOrderedAscending = -1L,
NSOrderedSame = 0,
NSOrderedDescending = 1
}NSComparisonResult; //ret 就是一个枚举变量
NSComparisonResult ret; int a; //定义变量
typedef int int_32; //给int类型取了一个新的别名 int_32
typedef long int_64; //使用int_32 声明变量
int_32 b, c, d; struct stuInfo
{
char *name;
int age;
};
typedef struct stuInfo Stu;
Stu stu; typedef:
作用:是给类型取别名 */ //-------比较字符串的大小----------
NSComparisonResult ret1 = [ocStr1 compare:ocStr2];
switch (ret1) {
case NSOrderedAscending: //-1L
NSLog(@"ocStr1 < ocStr2");
break;
case NSOrderedDescending: //1L
NSLog(@"ocStr1 > ocStr2");
break;
case NSOrderedSame:
NSLog(@"ocStr1 == ocStr2");
default:
break;
} //-------忽略字符大小写进行比较-----------
NSComparisonResult ret2 = [ocStr1 compare:ocStr2 options:NSCaseInsensitiveSearch];
if (ret2 == NSOrderedAscending) {
NSLog(@"ocStr1 < ocStr2");
} else if (ret2 == NSOrderedDescending) {
NSLog(@"ocStr1 > ocStr2");
} else {
NSLog(@"ocStr1 == ocStr2");
} //4.字符串的查找
NSString *ocStr3 = @"When i was young, i was a student";
NSString *ocStr4 = @"was"; /*
typedef struct _NSRange {
NSUInteger location; //下标
NSUInteger length; //长度
} NSRange;
*/ //rangeOfString:(NSString *)aString
//正向查找,返回第一次出现的字串的信息的结构体
//如果存在,返回在长串中的起始位置和匹配的长度(短传的有效长度)
//如果查找失败:返回的起始位置 NSNotFound
NSRange range;
range = [ocStr3 rangeOfString:ocStr4];
if (range.location != NSNotFound) {
NSLog(@"location: %lu, length: %lu", range.location, range.length);
} else {
NSLog(@"Not found!");
NSLog(@"NSNotFound = %lx", NSNotFound); //有符号数 01111111111.。11111
} //从后往前查找 NSBackwardsSearch
range = [ocStr3 rangeOfString:ocStr4 options:NSBackwardsSearch];
if (range.location == NSNotFound) {
NSLog(@"Not found!");
} else {
NSLog(@"location: %lu, length: %lu", range.location, range.length);
} //_______________字符串查找练习________________________
char *cStr = "Hi, I am fine,and you";
NSString *ocString = [NSString stringWithUTF8String:cStr];
NSRange range1 = [ocString rangeOfString:@"fine"];
if (range1.location == NSNotFound) {
NSLog(@"Not found");
} else {
NSLog(@"location: %lu, lenght: %lu", range1.location, range1.length);
} //5. 判断字符串的前缀和后缀
//hasPrefix
//hasSuffix NSString *site = @"http://www.baidu.com"; //判断site 是否以 http开头
BOOL ret3 = [site hasPrefix:@"http"];
NSLog(@"ret3 = %d", ret3); NSString *mp3Str = @"最炫名族风.mp3";
ret3 = [mp3Str hasSuffix:@"mp3"];
NSLog(@"ret3 = %d", ret3); //6. 将数字字符串对象-------------->简单数数字
//@"12345" ---> 12345
NSString *intStr = @"12345";
int num = [intStr intValue];
NSLog(@"num = %d", num); NSString *floatStr = @"3.14";
float f = [floatStr floatValue];
NSLog(@"f = %f", f); NSInteger inter = [intStr integerValue];
NSLog(@"inter = %ld", inter); //7. 大小写的转换
NSString *lowerStr = @"ZHAnGSAN";
NSString *upperStr = [lowerStr uppercaseString];
NSLog(@"upperStr = %@", upperStr); NSString *lowerStr1 = [upperStr lowercaseString];
NSLog(@"lowerStr1 = %@", lowerStr1); NSString *str1 = [lowerStr capitalizedString]; //将首字母转换为大小字母
NSLog(@"str1 = %@", str1); //8. 字符串的提取, 提取子串
NSString *string1 = @"When I was a young, I like a girl on my neibour class";
//从某个下标开始一直提取到结束 [ ] 闭区间
NSString *subStr1 = [string1 substringFromIndex:5];
NSLog(@"subStr1 = %@", subStr1); //从首字母开始一直提取到参数的前面的一个字符为止, [ ) 开区间
NSString *subStr2 = [string1 substringToIndex:4];
NSLog(@"subStr2 = %@", subStr2); //根据一个范围提取子串
NSRange range2 = {1, 4};
NSString *subStr3 = [string1 substringWithRange:range2];
NSLog(@"subStr3 = %@", subStr3); }
return 0;
}
可变字符串常用方法(包含不可变字符串的所有方法):
#import <Foundation/Foundation.h> int main(int argc, const char * argv[])
{ @autoreleasepool { //使用可变的指针 ----> 不可变对象, 还是不可变字符串
//NSMutableString *string = @"iOS"; NSMutableString *string = [[NSMutableString alloc] initWithString:@"hello"];
NSLog(@"string = %@", string); //可变字符串 -- (增、删、改)
//_____________________增____________________add, append
//1) 追加
//增加 (append)
[string appendString:@"world"];
NSLog(@"string = %@", string); [string appendFormat:@"%@, %d", @"Hi", 101];
NSLog(@"string = %@", string); //2) 插入
[string insertString:@"XXXXX" atIndex:3];
NSLog(@"string = %@", string); //____________________删除____________________ delete, remove [string deleteCharactersInRange:NSMakeRange(3, 4)];
NSLog(@"string = %@", string); //____________________改______________________change, replace [string replaceCharactersInRange:NSMakeRange(3, 1) withString:@"@@@@@"];
NSLog(@"string = %@", string); //____________________重置字符串_______________
//设置方法
[string setString:@"laowang"];
NSLog(@"string = %@", string); }
return 0;
}
OC第二节 —— NSString和NSMutableString的更多相关文章
- OC之字符串 NSString与NSMutableString
一.NSString 不可变字符串的操作1)将字符串常量对象直接赋值给字符串引用 NSString *str1=@"hello"; 字符串对象的输出格式:NSLog(@" ...
- OC本学习笔记Foundation框架NSString与NSMutableString
一.NSString与NSMutableString 相信大家对NSString类都不陌生.它是OC中提供的字符串类.它的对象中的字符串都是不可变的,而它的子类NSMutable ...
- Objective-C学习篇06—NSString与NSMutableString
NSString OC提供了定义字符串对象的方法,也就是将想要表达的字符串用一对双引号引起来,并在开头加上@.@是OC中的指令符,它告诉编译器@以后的内容为OC中的语法.比如@”Harbingwang ...
- NSString和NSMutableString常用方法+NSArray常用代码 (转)
常见的NSString和NSMutableString方法: NSString方法: [plain] view plaincopy +(id) stringWithContentsOfFile:p ...
- Objective-C: 字符串NSString与NSMutableString
字符串算是OC中非常重要和常用的一部分内容,OC中的字符串与我之前在学习C,C++,Java中的字符串有一定的不同,它非常类似于C++中容器的概念,但用法却与之还是有很大的不同,也许是因为OC的语法就 ...
- KZ--NSString、NSMutableString
//NSString初始化的几种方法(3种方法) //1. NSString *str2 = [[NSString alloc] init]; ...
- bjective-C 中核心处理字符串的类是 NSString 与 NSMutableString
Objective-C 中核心处理字符串的类是 NSString 与 NSMutableString ,这两个类最大的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除非重 ...
- 关于NSString和NSMutableString的相关用法和基本介绍
Objective-C 中核心处理字符串的类是 NSString 与 NSMutableString ,这两个类最大的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除非重 ...
- 字符串NSString与NSMutableString常用方法
NSString 1.初始化 NSString *str1 = @"a OC Program"; 2.初始化 NSString *str2 = [[NSString alloc] ...
随机推荐
- iOS设置圆角矩形和阴影效果
1.设置圆角矩形 //设置dropview属性 _dropView.backgroundColor=[[UIColor whiteColor] colorWithAlphaComponent:0.8] ...
- Java线程池的那些事
熟悉java多线程的朋友一定十分了解java的线程池,jdk中的核心实现类为java.util.concurrent.ThreadPoolExecutor.大家可能了解到它的原理,甚至看过它的源码:但 ...
- hdu–2369 Bone Collector II(01背包变形题)
题意:求解01背包价值的第K优解. 分析: 基本思想是将每个状态都表示成有序队列,将状态转移方程中的max/min转化成有序队列的合并. 首先看01背包求最优解的状态转移方程:\[dp\left[ j ...
- STM8L --- External interrupt
note 1: Several interrupts can be pending at the same time. When an interrupt request is not servic ...
- Docker入门教程(三)Dockerfile
Docker入门教程(三)Dockerfile [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第三篇,介绍了Dockerfile的语法,DockerOn ...
- 【转】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
http://blog.csdn.net/xw20084898/article/details/17564957 一.工具:VC+OpenCV 二.语言:C++ 三.原理 otsu法(最大类间方差法, ...
- IP地址、子网掩码、网关、DNS的关系
什么是IP地址所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址.按照TCP/IP协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节 ...
- JAVA通过md5方法进行加密
import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /* * MD5 算法 * */ ...
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【二】——使用Repository模式构建数据库访问层
系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 在数据访问层应用Repository模式来隔离对领域对象的细节操作是很有意义的.它位于映射层 ...
- 字体投影(test-shadow)与框架投影(box-shadow)
字体投影:text-shadow: 1px 1px 1px #ccc; 框架投影:box-shadow: 10px 10px 25px #ccc;