0bjective-c 之 NSString 使用详解
查找资料的时候发现不错的文章,自己翻译之后分享给大家!
一个基本的该类型字符串例子:
@"This is a constant character string object";
在后台显示它:
NSLog (@"%@", @"This is a constant character string object");
得到其长度:
int len = [@"Hello" length];
NSLog (@"Length of string = %i", len);
结果是:
Length of string = 5
注意,空格也算一个。只是这个例子里没有而已。
创建可变或者不可变的字符串:
OBJ-C的字符串分为 mutable and immutable两种(可变和不可变)我们通常声明的 NSString是不可变的,一旦创建你休想用任何方式改变它!例如:
NSString *string1 = @"This string is immutable";
可变字符串是可以有很多方法可以用的,但是我们不能像刚才那样直接赋值,而是必须采用复制的方式来弄,例如:
NSMutableString *string2 = [NSMutableString stringWithString:@"This string is mutable"];
如果你想改变不可见字符串,那么只有一个办法,那就是再声明一个可变的字符串,然后把内容复制进入,例如:
NSString *string1 = @"This is a string";
NSMutableString *string2;
string2 = [NSMutableString stringWithString: string1];
复制一个字符串:
如果是INT类型我们大可以这样做:
int a = 10;
int b;
a = b;
但是对于字符串来说我们用下面这种做法是很愚蠢的:
NSMutableString *string1;
NSMutableString *string2;
string1 = [NSMutableString stringWithString: @"This is a string"];
string2 = string1;
定义的字符串变量都是指针,上面这种赋值方式只是让两个字符串指向同一块内存而已,所以我们测试一下就知道了:
NSMutableString *string1;
NSMutableString *string2;
string1 = [NSMutableString stringWithString: @"This is a string"];
string2 = string1;
[string2 appendString: @" and it is mine!"];
NSLog (@"string1 = %@", string1);
NSLog (@"string2 = %@", string2);
结果果然是这样的:
2009-11-03 14:35:37.731 t[32239:10b] string1 = This is a string and it is mine!
2009-11-03 14:35:37.732 t[32239:10b] string2 = This is a string and it is mine!
所以我们必须使用下面的方法来复制:
NSMutableString *string1;
NSMutableString *string2;
string1 = [NSMutableString stringWithString: @"This is a string"]; // Initialize string1
string2 = [NSMutableString stringWithString: string1]; // Copy string1 object to string2
[string2 appendString: @" and it is mine!"]; // Modify string2
NSLog (@"string1 = %@", string1);
NSLog (@"string2 = %@", string2);
让我们来看一下结果吧,没有问题了:
2009-11-03 14:42:10.426 t[32263:10b] string1 = This is a string
2009-11-03 14:42:10.427 t[32263:10b] string2 = This is a string and it is mine!
对字符串进行检索:
我们可以使用 rangeOfString method 来对字符串进行检索 这个方法返回一个 NSRange 类型的变量,下面我们来看具体使用例子:
NSString *string1 = @"The quick brown fox jumped";
NSRange match;
match = [string1 rangeOfString: @"brown fox"];
NSLog (@"match found at index %i", match.location);
NSLog (@"match length = %i", match.length);
location 的意思就是所寻找的字符串的起始位置,注意是从0开始数而不是1,length 就是找到的这个字符串有多长,这个是从1开始数的,所以我们可以知道上面的例子中location 的值是10,而length的值是9。
如果没有找到,系统会给location 设置成NSNotFound下面是个例子:
NSString *string1 = @"The quick brown fox jumped";
NSRange match;
match = [string1 rangeOfString: @"brown dog"];
if (match.location == NSNotFound)
NSLog (@"Match not found");
else
NSLog (@"match found at index %i", match.location);
替换字符串的某一部分:
我们可以用replaceCharactersInRange方法来替换字符串的某一部分,它需要2个参数,第一个参数是一个NSRange类型的,它必须指出我们从哪个坐标开始替换,以及替换几个字母,我们可以利用NSMakeRange来方便的搞定这个参数,第二个参数就是我们具体要替换的字符串了,下面是例子:
NSMutableString *string1 = [NSMutableString stringWithString: @"The quick brown fox jumped"];
[string1 replaceCharactersInRange: NSMakeRange(16, 3) withString: @"squirrel"];
NSLog (@"string1 = %@", string1);
替换成功了,我们替换的新字符串不一定和以前的一样长,替换之后它会自动调整长度的。
检索与替换配合使用:
我们可以把以上两个方法放在一起用,这样我们就不用去数数了,很方便的,看例子吧:
NSMutableString *string1 = [NSMutableString stringWithString: @"The quick brown fox jumped"];
[string1 replaceCharactersInRange: [string1 rangeOfString: @"brown fox"] withString: @"black dog"];
我们得到的结果是: "The quick black dog jumped".
删除字符串的一部分:
这个方法的使用方法和上面差不多,我们依然可以使用 rangeOfString方法来帮助它,看例子:
NSMutableString *string1 = [NSMutableString stringWithString: @"The quick brown fox jumped"];
[string1 deleteCharactersInRange: [string1 rangeOfString: @"jumped"]];
提取出字符串的一部分:
使用substringWithRange方法就可以做到这些了,它只需要你提供你希望提取的位置和长度即可:
NSMutableString *string1 = [NSMutableString stringWithString: @"The quick brown fox jumped"];
NSString *string2;
string2 = [string1 substringWithRange: NSMakeRange (4, 5)];
NSLog (@"string2 = %@", string2);
我们的结果自然是:quick
我们还可以使用 subStringFromIndex方法来得到制定位置之后所有的字符串,我们只需要提供一个位置参数:
NSMutableString *string1 = [NSMutableString stringWithString: @"The quick brown fox jumped"];
NSString *string2;
string2 = [string1 substringFromIndex: 4];
结果是什么就不用说了吧,很简单。
在字符串中插入一段文本:
有了上面的基础,直接看例子就可以明白了:
NSMutableString *string1 = [NSMutableString stringWithString: @"The quick brown fox jumped"];
[string1 insertString: @"agile, " atIndex: 4];
在字符串最后添加一段文本:
直接看例子:
NSMutableString *string1 = [NSMutableString stringWithString: @"The quick brown fox jumped"];
[string1 appendString: @" over the lazy dog"];
NSLog (@"string1 = %@", string1);
连接两个字符串:
NSString* string; // 结果字符串
NSString* string1, string2; //已存在的字符串
1. string = [NSString initWithFormat:@"%@,%@", string1, string2 ];
2. string = [string1 stringByAppendingString:string2];</p>
3 . string = [string stringByAppendingFormat:@"%@,%@",string1, string2];
比较两个字符串:
我们要比较两个字符串是否相等,看看下面的例子:
NSString *string1 = @"My String";
NSString *string2 = @"My String";
if (string1 == string2)
NSLog (@"Strings match");
else
NSLog (@"Strings do not match");
请一定不要这样做,这样比较的是两个字符串指向的是否是同一块内存,而并不是他们的字符是否相等,所以上面的例子答案是不相等的,那么我们应该按照下面这样做才是正确的:
NSString *string1 = @"My String";
NSString *string2 = @"My String 2";
if ([string1 isEqualToString: string2])
NSLog (@"Strings match");
else
NSLog (@"Strings do not match");
查看字符串的前缀和后缀:
我们用 hasPrefix 和 hasSuffix 方法来查看字符串的前后缀,它们返回一个BOOLEAN类型的变量告诉我们字符串的前后缀到底是不是我们输入的字母,下面是例子:
NSString *string1 = @"The quick brown fox jumped";
BOOL result;
result = [string1 hasPrefix: @"The"];
if (result)
NSLog (@"String begins with The");
result = [string1 hasSuffix: @"dog"];
if (result)
NSLog (@"String ends with dog");
转换大小写:
• 单词首字母大写:
NSString *string1 = @"The quicK brOwn fox jumpeD";
NSString *string2;
string2 = [string1 capitalizedString];
结果是 "The Quick Brown Fox Jumped" .
• 全部小写
NSString *string1 = @"The quicK brOwn fox jumpeD";
NSString *string2;
string2 = [string1 lowercaseString];
结果是 "the quick brown fox jumped".
• 全部大写
NSString *string1 = @"The quicK brOwn fox jumpeD";
NSString *string2;
string2 = [string1 uppercaseString];
结果是 "THE QUICK BROWN FOX JUMPED".
以上例子改变的都是string2,而string1仍然保持原样不变。
把字符串转成数字类型:
直接看例子就可以明白了:
• 转换为 int
NSString *string1 = @"10";
int myInt = [string1 intValue];
NSLog (@"%i", myInt);
• 转换为 double
NSString *string1 = @"10.1092";
double myDouble = [string1 doubleValue];
NSLog (@"%f", myDouble);
• 转换为 float
NSString *string1 = @"10.1092";
float myFloat = [string1 floatValue];
NSLog (@"%f", myFloat);
• 转换为 NSInteger
NSString *string1 = @"10";
NSInteger myInteger = [string1 integerValue];
NSLog (@"%li", myInteger);
把字符串转换为 ASCII 码:
例子如下:
NSString *string1 = @"The quick browen fox";
const char *utfString = [string1 UTF8String];
printf ("Converted string = %sn", utfString);
0bjective-c 之 NSString 使用详解的更多相关文章
- IOS NSString 用法详解
[cpp] view plain copy //NSString 操作均不改变自身值 //构建字符串 NSString *szTmp = @"A string"; ...
- ios label 自动计算行高详解
在OC当中自动计算行高主要调用系统的 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ffffff } span ...
- NSURLSession详解
导语 现在NSURLConnection在开发中会使用的越来越少,iOS9已经将NSURLConnection废弃,现在最低版本一般适配iOS7,所以也可以使用. NSURLConnection相对于 ...
- NSSearchPathForDirectoriesInDomains函数详解
NSSearchPathForDirectoriesInDomains函数详解 #import "NSString+FilePath.h" @implementation ...
- 【iOS自定义键盘及键盘切换】详解
[iOS自定义键盘]详解 实现效果展示: 一.实现的协议方法代码 #import <UIKit/UIKit.h> //创建自定义键盘协议 @protocol XFG_KeyBoardDel ...
- 李洪强iOS经典面试题156 - Runtime详解(面试必备)
李洪强iOS经典面试题156 - Runtime详解(面试必备) 一.runtime简介 RunTime简称运行时.OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制. 对于C ...
- 李洪强iOS经典面试题155 - const,static,extern详解(面试必备)
李洪强iOS经典面试题155 - const,static,extern详解(面试必备) 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽 ...
- iOS中 HTTP/Socket/TCP/IP通信协议详解
// OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 // 3. 会话层 // 4. 传输层 // 5. 网络层 // 6. 数据链接层 // 7. ...
- iPhone应用开发 UITableView学习点滴详解
iPhone应用开发 UITableView学习点滴详解是本文要介绍的内容,内容不多,主要是以代码实现UITableView的学习点滴,我们来看内容. -.建立 UITableView DataTab ...
随机推荐
- 在linux/unix中查找大文件
在linux/unix中查找大文件,如查找大于100M文件的位置路径,查找等于10M文件的位置路径等等,下面就介绍几个实现快速查找的命令: 1. 查找指定目录下所有大于100M的文件,命令为 find ...
- Qt之窗体透明 (三种不同的方法和效果)
关于窗体透明,经常遇到,网上的资料倒不少,也不知道写的时候是否验证过,很多都不正确...今天就在此一一阐述! 以下各效果是利用以前写过的一个小程序作为示例进行讲解!(代码过多,贴主要部分) ...
- JavaWeb笔记——上传文件
jsp上传文件 *<form>标签method属性必须为post,并且添加enctype="multipart/form-data"属性 ------------- ...
- JavaWeb笔记——JSTL标签
JSTL 1. jstl的概述 * apache的东西,依赖EL * 使用jstl需要导入jstl.jar.standard.jar * 四大库: > core:核心库,重点 ...
- linux驱动分离分层的概念
这个分离分层的概念和输入子系统有点像,但不是完全一样的.为什么会再弄一个这个模型出来我也没有搞懂,现在我的学习还停留在把知识学懂的层面上.至于为什么会产生这种知识,现在我还无从解释,还需时日成长. 这 ...
- Tomcat常见内存溢出的解决办法
PermGen space错误解决方法 在看下文之前,首先要确认意见事情,就是你是如何启动tomcat的,我们在平时的开发环境当中,都是通过startup.bat方式启动tomcat的,那么你按照下面 ...
- 使用RPM管理软件包
一.概念简介 RPM 全名是『 RedHat Package Manager 』简称则为 RPM,是以一种数据库记录的方式来将你所需要的套件安装到你的 Linux 主机的一套管理程序. 二.实验环境 ...
- Oracle ->> Oracle下生成序列的方法
用hierachical query,即connect by配合dual表生成序列,mod这个是取余函数,生成group factor.最后面的connect by rownum <= 100可 ...
- c# ffmpeg常用参数
c# ffmpeg常用参数 转换文件格式的同时抓缩微图: ffmpeg -i "test.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240 ...
- 练习用php做表格
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...