您的位置:首页 > 其它

四十八、基础框架(六)不可修改字符串2-其它基本字符串操作

2012-10-28 16:24 363 查看
下面的程序 示范了 其它处理字符串的方法。比如 从一个字符串当中 提取 另一个字符串,找出 一个字符串在另外一个字符串中的位置。

某些措施 要求 你 提供 一个特定的范围。范围 包含了 你需要的字符串 在某个字符串中的位置、长度。比如,从第0个字符开始的3个字符的范围 就是 {0,3}。一些适用于NSString这类物件(或者 其它基础框架内的物件类型)的措施 会要求 你 用 一种特殊的数据类型 来表示范围,那 就是 NSRange。NSRange 事实上 是 一种组织,这种组织 包含了 位置 和 长度这两个成员。

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273#import <Foundation/NSObject.h>#import <Foundation/NSString.h>#import <Foundation/NSAutoreleasePool.h>int main (int argc, const char * argv[]){ NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init]; NSString *string1=@"I'm String One."; NSString *string2=@"I'm String Two."; NSString *result; NSRange subRange; //从字符串中提取前3个字符 result=[string1 substringToIndex:3]; NSLog(@"字符串string1的前三个字符为:%@",result); //从字符串中提取第5个后面的字符 result=[string1 substringFromIndex:5]; NSLog(@"字符串string1的第5后面的字符为:%@",result); //从字符串中提取第8个、第13个及中间的字符 result=[[string1 substringFromIndex:8] substringToIndex:6]; NSLog(@"第8个、第13个及其中间的字符为:%@",result); //一个更简单的办法 result=[string1 substringWithRange:NSMakeRange(8,6)]; NSLog(@"第8个、第13个及其中间的字符为:%@",result); //确定一个字符串在另外一个字符串中的位置 subRange=[string1 rangeOfString:@"String One"]; NSLog(@"字符串“String One”位置为:%lu,长度为:%lu。",subRange.location,subRange.length); subRange=[string1 rangeOfString:@"String Two"]; if(subRange.location==NSNotFound) { NSLog(@"字符串“String Two”没有找到。"); } else { NSLog(@"字符串“String Two”位置为:%lu,长度为:%lu。",subRange.location,subRange.length); } [pool drain]; return 0;}
运行 这个程序后,可以得到 下面的结果:

1

2

3

4

5

6

2012-04-09 17:07:21.953 Sample[804:707] 字符串string1的前三个字符为:I'm

2012-04-09 17:07:21.955 Sample[804:707] 字符串string1的第5个符为:tring One.

2012-04-09 17:07:21.960 Sample[804:707] 第8个、第13个及其中间的字符为:ng One

2012-04-09 17:07:21.960 Sample[804:707] 第8个、第13个及其中间的字符为:ng One

2012-04-09 17:07:21.962 Sample[804:707] 字符串“String One”位置为:4,长度为:10。

2012-04-09 17:07:21.962 Sample[804:707] 字符串“String Two”没有找到。

substringToIndex:n这项措施 会 将 其实施对象中 前n个字符 提取出来,但是 并不包括 第n个字符。由于 字符串 总是 从第0个字符 开始,所以 如果 这项措施附带的参数 为 3,那么 这项措施 就会 提取出 第0个、第1个 和 第2个字符。对于 任何附带下标的字符串措施来说,如果 你 提供 无效的参数,那么 你 就会得到 ”Range or index out of bounds”这个错误信息。

substringToIndex:n这项措施 会 将 其实施对象中 第n个字符后的字符 提取出来,但是 并不包括 第n个字符。

1result=[[string1 substringFromIndex:8] substringToIndex:6];
这行语句 示范了 如何 将 substringFromIndex: 和 substringToIndex:这两项措施 结合起来,将 某个字符串中 特定范围中的字符 提取出来。其中 substringFromIndex:这项措施 将 字符串string1中 第8个字符后面的字符 提取出来。接着 substringToIndex:这项措施 将 字符串string1中 第8个字符后面的字符中 前6个字符 提取出来。最后的结果 在原字符串中的范围 就是 {8,6},也就是 位置 为 8,长度 为 6。而 substringWithRange:这项措施 将 上面两个步骤 结合成了 一个步骤。

1

NSMakeRange(8,6)

这个特殊的函数 创建出 一个从8开始,长度为6的范围。这个范围 会当作 substringWithRange:这项措施的参数。

rangeOfString:这项措施 可以用来 确定 在一个字符串当中 某个特定的字符串的位置。如果 这个特定的字符串 找到了,那么 这项措施 就会产生 一个NSRange类型的数据;如果 没有找到,这项措施 也会产生 一个NSRange类型的数据,不过 这个数据中的成员location的值 为 NSNotFound。

1

subRange=[string1rangeOfString:@"String
Two"];

这行语句 刚好 办到了 上面提到的事。注意:subRange 并不是 一个物件,而 是 一个组织、一个结构体。你 也可以看到 创建 subRange这个组织时,并没有 使用 星号。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: