14.Object-C--浅谈Foundation框架字符串NSString 与NSMutableString
OC的字符串时经常使用到的,今天我对于OC字符串做一个简单的总结,如果有错误之处,麻烦留言指正。感谢!
NSString是一个不可变长度的字符串对象。表示它初始化以后,你不能改变该变量所分配的内存中的值,但你可以重新分配该变量所处的内存空间。
下面就从字符串NSString的创建开始说起:
1.创建一个NSString类型的字符串有三种方法:
//1.直接赋值
NSString *s1 = @"age is 26";
//2.使用实例方法初始化
NSString *s2 = [[NSString alloc]initWithFormat:@"age is %d",];
//3.使用类方法
NSString * s6 = [NSString stringWithUTF8String:"QYMa"];
NSString *s7 = [NSString stringWithFormat:@"age is %d",];
这里面需要注意的一点是,看下面的代码:
//新版本的SDK已经不推荐使用此方法创建NSString,可以直接常量赋值
//Using 'stringWithString:'with a literal is redundant
NSString *s8 = [NSString stringWithString:@"QYMa"];
2.字符串的转化
(1).将C语言中的字符串转化为OC字符串 :initWithUTF8String:
//c字符串转OC字符串
const char *s = "QYMa";
NSString *s3 = [[NSString alloc]initWithUTF8String:s];
(2). 将OC字符串转化为C字符串:UTF8String
//OC字符串转c字符串
const char *cs = [s3 UTF8String];
(3).将字符串转化为的int double float. intValue,doubleValue,floatValue,intergerValue
NSString *s1 = @"";
int i = [s1 intValue];//转化int类型
double d = [s1 doubleValue];//转化为double类型
float f = [s1 floatValue];//转化为float类型
NSLog(@"\ni = %d, d = %f,f = %f",i,d,f );
- (NSInteger)integerValue
运行结果:
i = 123, d = 123.000000,f = 123.000000
(4).求字符串的长度 :length
NSUInteger len = [s1 length];
(5).根据下标获取获取字符串中的某个字符 :characterAtIndex:
char st = [s1 characterAtIndex:];
(6).比较两个字符串是否相等,相等返回YES(1),不相等返回NO(0) (BOOL YES(1) NO(0)) :isEqualToString:
BOOL b = [s1 isEqualToString:s4];
(7).比较两个字符串的大小,str1大于 返回1 相等返回0 小于返回-1:compare:
NSString *s1 = @"";
NSString *s5 = @"hahah";
int c1 = [s1 compare:s5];
(8).比较两个字符串不区分大小写:相等为0 ,小于-1 大于为1 :caseInsensitiveCompare:
NSString *str1 = @"haha";
NSString *str2 = @"HaHA";
int equal = [str1 caseInsensitiveCompare:str2];
(9).将字符串中的所有小写字符转换成大写 不改变原来的字符串,相当于将转化后为一个新的字符串。:uppercaseString
NSString *str1 = @"haha";
NSString *str3 = [str1 uppercaseString];
NSLog(@"%@",str3);
(10).将字符串中的所有大写字符转换成小写 不改变原来的字符串:lowercaseString
NSString *str4 = [str3 lowercaseString];
NSLog(@"%@",str4);
(11).将字符串中出现的第一个字母转换成大写,其余字母小写.:capitalizedString
NSString *str5 = [str1 capitalizedString];
NSLog(@"%@",str5);
(12).查找字串 在字符串中的位置,找不到返回NSNotFound(-1) 找到返回location和length: rangOfString:
NSString *str1 = @"my name is QYMa";
NSRange range = [str1 rangeOfString:@"QYMa"];
NSLog(@"%@",NSStringFromRange(range));//
{11, 4}
(13).字符串抽取 从下标0开始到某个下标 (包前不包后):substringToIndex:
NSString *str3 = [str1 substringToIndex:];
(14).字符串截取从 从某个下标开始抽取到字符串结束 :substringFromIndex:
NSString *str2 = [str1 substringFromIndex:];
(15).在range指定范围内抽取字串:substringWithRange:
NSString *str1 = @"my name is QYMa";
NSString *str4 = [str1 substringWithRange:NSMakeRange(, )];
(16).判断字符串是否以指定字符串开头:hasPrefix:
BOOL b = [str1 hasPrefix:@"my"];
(17).判断字符串是否以指定的字符串结尾:hasSuffix:
BOOL b1 = [str1 hasSuffix:@"Ma"];
(18).将指定文件的内容读取到字符串里面:initWithContentOfFile: encoding : error:
NSString *s44 = [[NSString alloc]initWithContentsOfFile:@"/Users/mqy/Desktop/zhongyao.txt" encoding:NSUTF8StringEncoding error:nil];
stringWithContentsOfFile
(19).将制定URL中的内容读取到字符串中:initWithContentOfURL: encoding: error:
NSURL *url = [[NSURL alloc]initWithString:@"file:///Users/mqy/Desktop/zhongyao.txt"];
NSString * s5 = [[NSString alloc]initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
stringWithContentsOfURL
(20).字符串的末尾追加新的字符,原来的字符串不变,会有一个新的字符串。:stringByAppendingString:
NSString *str5 = [str1 stringByAppendingString: @"^^"];
my name is QYMa^^
(21).在指定的范围追加字符串,形成一个新的字符串。:stringByReplaceingCharactersInRange: withString:
NSString * str33 = @"my is QYMa";
NSRange range1 = {,};
// location代表的时从哪个索引开始插入,length 代表的意思可以覆盖几个字符
NSString * str43 = [str33 stringByReplacingCharactersInRange:range1 withString:@"name"];
NSLog(@"str4 %@",str43);//
my name is QYMa
(22).使用新的字符,替换原有的字符。stringByReplacingOccurrencesOfString: withString:
NSString * str55 = @"my name Is QYMa";
NSString * str6 = [str55 stringByReplacingOccurrencesOfString:@"I" withString:@"i"];
NSLog(@"str6 %@",str6);
str6 my name is QYMa
(23).删除某个特定字符。stringByReplacingOccurrencesOfString: withString:
NSString * str7 = @"my---name--is";
NSString * str8 = [str7 stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSLog(@"%@",str8);
mynameis
(24).将字符串 写入到文件
NSString
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error
//扩展路径
NSString *Path = @"~/NSData.txt";
NSString *absolutePath = [Path stringByExpandingTildeInPath];
NSLog(@"absolutePath:%@",absolutePath);
NSLog(@"Path:%@",[absolutePath stringByAbbreviatingWithTildeInPath]); //文件扩展名
NSString *Path = @"~/NSData.txt";
NSLog(@"Extension:%@",[Path pathExtension]);
(25.)字符串检索
NSString
//如果找到就返回范围,否则NSRange的location项被设置为NSNotFound
- (NSRange)rangeOfString:(NSString *)subString;
- (NSRange)rangeOfString:(NSString *)subString option:(unsigned)mask;
- (NSRange)rangeOfString:(NSString *)subString option:(unsigned)mask range:(NSRange)range;
-----mask常用选项列表
NSCaseInsensitiveSearch 不区分字母大小写
NSLiteralSearch 对字符串进行字节单位的比较,一般可提高检索速度
NSBackwardsSearch 从范围的末尾开始检索
NSAnchoredSearch 仅检索制定范围的前部。忽略字符串中间的检索字符
例如:
NSString *string = @"hello world";
NSRange range = [string rangeOfString:@"he"];
if(range.location != NSNotFound)
{
NSLog(@" location=%d,length=%d",range.location,range.length);
}
(26).将字符串通过特定字符分割。 将字符串切割成数组:componentsSeparatedByString:
NSString * str = @"test,test1,test2,test3";
NSArray *array = [str componentsSeparatedByString:@","];
NSLog(@"array[2] = %@",array[]);
(27).多重分割符:有2个或两个以上分隔符.componentsSeparatedByCharactersInSet
NSString *str = @"A~B^C";
NSArray *arr = [str componentsSeparatedByCharactersInSet:
[NSCharacterSet characterSetWithCharactersInString:@"~^"]];
(28).将数组中的字符串拼接成一个路径.pathWithComponents:
NSMutableArray *muArray = [NSMutableArray array];
[muArray addObject:@"Users"];
[muArray addObject:@"mqy"];
[muArray addObject:@"DeskTop"];
NSString *path = [NSString pathWithComponents:muArray];
NSLog(@"%@",path);
Users/mqy/DeskTop
(29)将路径分割成数组 pathComponents
//将路径分割成数组
NSArray *array = [path pathComponents];
NSLog(@"%@",array);
(30).判断是否为绝对路径 isAbsolutePath(依据前面有没有/)
NSString *str1 = @"/Users/mqy/Desktop";
//判断是否为绝对路径
NSLog(@"%i",[str1 isAbsolutePath]);
NSStringEncoding 中常用的字符编码:
NSASCIIStringEncoding
NSUTF8StringEncoding
NSUnicodeStringEncoding
说实话,NSString的方法真心好多啊!(°_°)。
接下来说一下,NSMutableString
NSMutableString 类继承NSString类,那么NSString 提供的方法在NSMutableString中都可以使用,NSMutableString好比一个字符串链表,它可以任意的动态在字符串中添加字符串 删除字符串 指定位置插入字符串,用它来操作字符串更加灵活。
下面就说一下:
(1).将不可变的字符串转换为可变的字符串
NSMutableString *s1 = [NSMutableString stringWithFormat:@"my name is QYMa"];
NSMutableString * str = [[NSMutableString alloc]initWithString:@"hello"];
(2).在指定下标(不要越界)位置插入NSString类型字符串。insertString: atIndex:
[s1 insertString:@" ?" atIndex:];
my name is ?QYMa
(3).在末尾追加单个字符串。appendString: appendFormat:
//使用拼接方法 拼接单个
[s1 appendString:@" girl"];
//拼接多个
[s1 appendFormat:@"my age is %d",];
(4).删除指定子字符串。deleteCharactersInRange: rangeOfString:
//获取girl所在的位置,并删除
[s1 deleteCharactersInRange:[s1 rangeOfString :@"girl"]];
NSLog(@"S1 = %@",s1);
(5).从指定下标删除length个字符. deleteCharactersInRange:
[str deleteCharactersInRange:NSMakeRange(, )];
(6).将指定下标位置的length个字符替换为指定的字符串.replaceCharactersInRange: withString:
[str replaceCharactersInRange:NSMakeRange(, ) withString:@"ios"];
(7).修改字符串亦称对该可变字符串赋值。
[str setString:@"QYMa"];
目前就先整理到这了,这个可真是不少啊!好啦!活动活动筋骨,出去呼吸一下新鲜空气,走啦!
14.Object-C--浅谈Foundation框架字符串NSString 与NSMutableString的更多相关文章
- 15.Object-C--浅谈Foundation框架OC数组NSArray与NSMutableArray
昨天总结了一下NSString与NSMutableString,今天我在这里总结一下NSArray与NSMutableArray. NSArray数组是:不可变数组. nil 是数组元素结束的标记.O ...
- 13.Object-C--浅谈Foundation框架常用的结构体
------- android培训.iOS培训.期待与您交流! ---------- 昨天学习了Foundation框架中常用的结构体,下面我简单的总结一下,如果错误麻烦请留言指正,谢谢! Found ...
- OC中Foundation框架之NSString、NSMutableString
创建方式 )直接赋值 NSString *str =@"abc"; )创建对象 NSString *str2 = [[NSString alloc]init]; str2 =@&q ...
- 手撸ORM浅谈ORM框架之基础篇
好奇害死猫 一直觉得ORM框架好用.功能强大集众多优点于一身,当然ORM并非完美无缺,任何事物优缺点并存!我曾一度认为以为使用了ORM框架根本不需要关注Sql语句如何执行的,更不用关心优化的问题!!! ...
- 手撸ORM浅谈ORM框架之Add篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- 手撸ORM浅谈ORM框架之Update篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- 手撸ORM浅谈ORM框架之Delete篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- 手撸ORM浅谈ORM框架之Query篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- Foundation框架—字符串
Foundation框架—字符串 一.Foundation框架中一些常用的类 字符串型: NSString:不可变字符串 NSMutableString:可变字符串 集合型: 1) NSArray:O ...
随机推荐
- 函数式 CSS (FCSS)
在Wealthfront我们是一个函数式编程的超级粉丝.强调不变性和函数式风格意味着更少的“意外”(surprises),因为副作用是有限的或不存在的.我们能将独立的组件迅速构建出大型系统,通过组合的 ...
- MySQL查看表占用空间大小(转)
MySQL查看表占用空间大小(转) //先进去MySQL自带管理库:information_schema //自己的数据库:dbwww58com_kuchecarlib //自己的表:t_carmod ...
- Ruby Profiler 详解之 stackprof
简介 stackprof 是基于采样的一个调优工具,采样有什么好处呢?好处就是你可以线上使用,按照内置的算法抓取一部分数据,只影响一小部分性能.它会产生一系列的 dump 文件,然后你在线下分析这些文 ...
- ZOJ3560 Re:the Princess(高斯消元法)
题目要读很久才能理解它的意思和笑点(如果你也看过那个笑话的话),读懂之后就会发现是一个高斯消元法的题目,对于我来说难点不在高斯消元,而在于字符串处理.先来说说题意吧: 总共有n个人,n个人都会有一段话 ...
- POJ 1006 Biorhythms (中国剩余定理)
在POJ上有译文(原文右上角),选择语言:简体中文 求解同余方程组:x=ai(mod mi) i=1~r, m1,m2,...,mr互质利用中国剩余定理令M=m1*m2*...*mr,Mi=M/mi因 ...
- POJ 1279 Art Gallery(半平面交求多边形核的面积)
题目链接 题意 : 求一个多边形的核的面积. 思路 : 半平面交求多边形的核,然后在求面积即可. #include <stdio.h> #include <string.h> ...
- ExtJs布局之tabPanel
<!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...
- C++不能显式调用构造函数,会生成匿名对象,这点与Java完全不一样!
Java可以直接调用同名构造函数,仅仅起初始化的功能,并不构造新的对象,但是C++里面没有.看一下这段代码: class A { public: A() { printf("A() \n&q ...
- 296. Best Meeting Point
题目: A group of two or more people wants to meet and minimize the total travel distance. You are give ...
- Android 【问题汇总】列表数组越界的问题
遇到了一个诡异的问题,ListView发生数组越界(偶尔会),程序崩溃. 错误信息如下: W/dalvikvm( ): threadid=: thread exiting with uncaught ...