这篇文章主要详细介绍iOS中字符串的各种用法,如果发现不够完善可以提交意见,主要是方便对字符串的使用的理解 内容比较多但是详细,如果觉得以后用得着的地方可以先收藏着;
NSString的基本概念 (NSString是不可变字符串)
什么是NSString?
一个NSString代表一个字符串(文字内容)
一般称NSString为字符串类
NSString的创建方式 (两种)
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
// [self create1];
[self create2];
}/** 第一种创建方式 *///常量区中的字符串只要内容一致, 不会重复创建- (void)create1
{ NSString *str1 = @"lion"; NSString *str2 = @"lion"; //输出地址不一样
NSLog(@"\n %p \n %p",&str1,&str2);
}/** 第二种创建方式 *///堆区中得字符串哪怕内容一致, 也会重复创建- (void)create2
{//stringWithFormat 可以进行拼接
NSString *str1 = [NSString stringWithFormat:@"lion"]; NSString *str2 = [NSString stringWithFormat:@"lion"]; //输出地址相同
NSLog(@"\n %p \n %p",str1,str2);
}NSString的读写
读取:
// 用来保存错误信息NSError *error = nil;// 读取文件内容NSString *str = [NSString stringWithContentsOfFile:@"/Users/LJH/Desktop/Lion.txt" encoding:NSUTF8StringEncoding error:&error];// 如果有错误信息if (error) { NSLog(@"读取失败, 错误原因是:%@", [error localizedDescription]);
} else { // 如果没有错误信息
NSLog(@"读取成功, 文件内容是:\n%@", str);
}写入:
// writeToFile 写入NSString *str = @"Lion";BOOL flag = [str writeToFile:@"/Users/LJH/Desktop/Lion.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];if (flag == 1)
{ NSLog(@"写入成功");
}//注意: 重复写入同一个文件会覆盖上一个文件字符串的比较
NSString的大小写属性
全部字符转为大写字母 - (NSString *)uppercaseString; 全部字符转为小写字母 - (NSString *)lowercaseString 首字母变大写,其他字母都变小写 - (NSString *)capitalizedString
NSString的比较
one:
- (BOOL)isEqualToString:(NSString *)aString;
两个字符串的内容相同就返回YES, 否则返回NO
NSString *str1 = @"lion"; NSString *str2 = [NSString stringWithFormat:@"lion"]; if ([str1 isEqualToString:str2]) { NSLog(@"字符串内容一样");
} if (str1 == str2) { NSLog(@"字符串地址一样");
}two:
- (NSComparisonResult)compare:(NSString *)string;
这个方法可以用来比较两个字符串内容的大小
比较方法: 逐个字符地进行比较ASCII值,返回NSComparisonResult作为比较结果NSComparisonResult是一个枚举,有3个值:
如果左侧 > 右侧,返回NSOrderedDescending,
如果左侧 < 右侧,返回NSOrderedAscending,
如果左侧 == 右侧返回NSOrderedSame
NSString *str1 = @"abc"; NSString *str2 = @"abd"; switch ([str1 compare:str2]) { case NSOrderedAscending: NSLog(@"后面一个字符串大于前面一个"); break; case NSOrderedDescending: NSLog(@"后面一个字符串小于前面一个"); break; case NSOrderedSame: NSLog(@"两个字符串一样"); break;
}
输出结果: 后面一个字符串大于前面一个three:
- (NSComparisonResult) caseInsensitiveCompare:(NSString *)string; 忽略大小写进行比较,返回值与compare:一致
字符串搜索
- (BOOL)hasPrefix:(NSString *)aString; 是否以aString开头 - (BOOL)hasSuffix:(NSString *)aString; 是否以aString结尾 - (NSRange)rangeOfString:(NSString *)aString; 用来检查字符串内容中是否包含了aString 如果包含, 就返回aString的范围 如果不包含, NSRange的location为NSNotFound, length为0
NSRange基本概念
NSRange是Foundation框架中比较常用的结构体, 它的定义如下:typedef struct _NSRange { NSUInteger location; NSUInteger length;
} NSRange;// NSUInteger的定义typedef unsigned int NSUInteger;NSRange用来表示事物的一个范围,通常是字符串里的字符范围或者数组里的元素范围NSRange有2个成员NSUInteger location : 表示该范围的起始位置NSUInteger length : 表示该范围内的长度
比如@“I Miss You Lion”中的@“Lion”可以用location为11,length为4的范围来表示NSRange的创建
有3种方式创建一个NSRange变量
方式1NSRange range;
range.location = 11;
range.length = 4;
方式2NSRange range = {11, 4};
或者NSRange range = {.location = 11,.length = 4};
方式3 : 使用NSMakeRange函数NSRange range = NSMakeRange(11, 4);字符串的截取
one:
- (NSString *)substringFromIndex:(NSUInteger)from;
从指定位置from开始(包括指定位置的字符)到尾部
- (void)subFrom
{ //字符从0开始算
NSString *str = @"<head>会跳舞的狮子</head>";
str = [str substringFromIndex:6]; NSLog(@"str = %@", str); //打印结果 str = 会跳舞的狮子</head>}
two:
- (NSString *)substringToIndex:(NSUInteger)to;
从字符串的开头一直截取到指定的位置to,但不包括该位置的字符
- (void)subTo
{ NSString *str = @"<head>会跳舞的狮子</head>";
str = [str substringToIndex:12]; NSLog(@"str = %@", str); //打印结果 str = <head>会跳舞的狮子}
three:
- (NSString *)substringWithRange:(NSRange)range;
按照所给出的NSRange从字符串中截取子串
- (void)subWithRange
{ NSString *str = @"<head>会跳舞的狮子</head>"; NSRange range; /*
range.location = 6;
range.length = 6;
*/
range.location = [str rangeOfString:@">"].location + 1;
range.length = [str rangeOfString:@"</"].location - range.location; NSString *result = [str substringWithRange:range]; NSLog(@"result = %@", result); //打印结果 会跳舞的狮子}字符串的替换
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement;
用replacement替换target
- (void)Replacing
{ NSString *str = @"http:**www.baidu.com*lion.png"; NSString *newStr = [str stringByReplacingOccurrencesOfString:@"*" withString:@"/"]; NSLog(@"newStr = %@", newStr);
}
- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set;
去除首尾
- (void)Trimming
{ NSString *str = @" http://baidu.com/lion.png "; //去除首尾的空格
NSString *newStr = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; NSLog(@"str =|%@|", str); NSLog(@"newStr =|%@|", newStr); /*
打印结果
str =| http://baidu.com/lion.png |
newStr =|http://baidu.com/lion.png|
*/}字符串与路径
NSString 与 路径
one:
- (BOOL)isAbsolutePath;
是否为绝对路径
- (void)isAbsolutePath
{ // 其实就是判断是否以/开头
NSString *str = @"/Users/LJH/Desktop/Lion.txt"; NSString *str = @"Users/LJH/Desktop/Lion.txt"; if ([str isAbsolutePath]) { NSLog(@"是绝对路径");
}else
{ NSLog(@"不是绝对路径");
}
}
two:
- (NSString *)lastPathComponent;
获得最后一个目录
- (void)lastPathComponent
{ // 截取最后一个/后面的内容
NSString *str = @"/Users/LJH/Desktop/Lion.txt"; NSString *component = [str lastPathComponent]; NSLog(@"component = %@", component);
}
three:
- (NSString *)stringByDeletingLastPathComponent;
删除最后一个目录
- (void)stringByDeletingLastPathComponent
{ // 其实就是上次最后一个/和之后的内容
NSString *str = @"/Users/LJH/Desktop/Lion.txt"; NSString *newStr = [str stringByDeletingLastPathComponent]; NSLog(@"newStr = %@", newStr); //打印结果:newStr = /Users/LJH/Desktop}
four:
- (NSString *)stringByAppendingPathComponent:(NSString *)str;在路径的后面拼接一个目录 (也可以使用stringByAppendingString:或者stringByAppendingFormat:拼接字符串内容)
- (void)stringByAppendingPathComponent
{ // 其实就是在最后面加上/和要拼接得内容
// 注意会判断后面有没有/有就不添加了, 没有就添加, 并且如果有多个会替换为1个
// NSString *str = @"/Users/NJ-Lee/Desktop";
NSString *str = @"/Users/LJH/Desktop/"; NSString *newStr = [str stringByAppendingPathComponent:@"Lion"]; NSLog(@"newStr = %@", newStr); //打印结果:newStr = /Users/LJH/Desktop/Lion}NSString 与 文件拓展名
- (void)pathExtension
{
one:
- (NSString *)pathExtension;
获得拓展名 // 其实就是从最后面开始截取.之后的内容
// NSString *str = @"Lion.txt";
NSString *str = @"abc.Lion.txt"; NSString *extension = [str pathExtension]; NSLog(@"extension = %@", extension); //打印结果:extension = txt}
two:
- (NSString *)stringByDeletingPathExtension;
删除尾部的拓展名
- (void)stringByDeletingPathExtension
{ // 其实就是上次从最后面开始.之后的内容
NSString *str = @"love.Lion.txt"; NSString *newStr = [str stringByDeletingPathExtension]; NSLog(@"newStr = %@", newStr); //打印结果 newStr = love.Lion}
three:
- (NSString *)stringByAppendingPathExtension:(NSString *)str;
在尾部添加一个拓展名
- (void)stringByAppendingPathExtension
{ // 其实就是在最后面拼接上.和指定的内容
NSString *str = @"Lion"; NSString *newStr = [str stringByAppendingPathExtension:@"png"]; NSLog(@"newStr = %@", newStr); //打印结果: newStr = Lion.png}字符串与基本数据类型的转换
- (NSUInteger)length; 返回字符串的长度(有多少个文字) - (unichar)characterAtIndex:(NSUInteger)index; 返回index位置对应的字符 转为基本数据类型 - (double)doubleValue; - (float)floatValue; - (int)intValue; NSString *str1 = @"22"; NSString *str2 = @"22"; int res = str1.intValue + str2.intValue; NSLog(@"res = %i", res); NSString *str1 = @"22"; NSString *str2 = @"22.2"; double res = str1.doubleValue + str2.doubleValue; NSLog(@"res = %f", res); 转为C语言中的字符串 - (char *)UTF8String; NSString *str = @"love"; const char *cStr = [str UTF8String]; NSLog(@"cStr = %s", cStr); char *cStr = "love"; NSString *str = [NSString stringWithUTF8String:cStr]; NSLog(@"str = %@", str);
将一个字符串分隔成多个字符串
// 将一个字符串分隔成多个字符串
//- (NSArray *)componentsSeparatedByString:(NSString *)separator- (void)componentsSeparatedByString
{ // 假如有一个字符串
NSString *list = @"java,oc,c,swift";
// 可以用上面的函数得到一个字符串数组:
NSArray *listItems = [list componentsSeparatedByString:@","]; // 这个数组就是把原来的字符串用","分割得到的多个字符串:
//所以如果用这个方法就可以将字符串分隔多个字符串,然后存放到数组里面,在数组中取出想要的字符串
NSLog(@"%@",listItems); //打印结果见下:
/*
2016-05-30 11:09:22.337 NSString的基本使用[1277:56593] (
java,
oc,
c,
swift
)
*/}NSMutableString的用法 (NSMutableString是可变字符串)
NSMutableString的基本概念
NSMutableString 类 继承NSString类,那么NSString ?供的方法在NSMutableString中基本都可以使用,NSMutableString好比一个字符串链表,它可以任意的动态在字符串中添加字符 串 删除字符串 指定位置插入字符串,使用它来操作字符串会更加灵活。
NSMutableString和NSString的区别
NSString是不可变的, 里面的文字内容是不能进行修改的 + NSMutableString是可变的, 里面的文字内容可以随时更改
NSMutableString能使用NSString的所有方法
字符串中的可变和不可变
不可变:指的是字符串在内存中占用的存储空间固定,并且存储的内容不能发生变化
- (void)str
{ // 改变了指针的指向, 并没有修改字符串
NSString *str = @"lion";
str = @"Lion";
// 生成了一个新的字符串, 并没有修改字符串
NSString *newStr = [str substringFromIndex:1]; NSLog(@"str = %@", str); NSLog(@"newStr = %@", newStr);
}
可变:指的是字符串在内存中占用的存储空间可以不固定,并且存储的内容可以被修改
- (void)strM
{ //可变的不能赋值给不可变的
//只有不可变的才能赋值给可变的
NSString *str = nil; NSMutableString *strM = [NSMutableString string]; NSLog(@"strM = %@", strM); // 修改原有字符串, 没有生成新的字符串
[strM appendString:@"Lion"]; NSLog(@"strM = %@", strM);
[strM appendString:@" love you "]; NSLog(@"strM = %@", strM);
str = strM; NSLog(@"str = %@",str);
}NSMutableString常用方法
one:
- (void)appendString:(NSString *)aString;
拼接aString到最后面
- (void)appendFormat:(NSString *)format, ...;
拼接一段格式化字符串到最后面
- (void)appendStrM
{ NSMutableString *strM = [NSMutableString string]; NSLog(@"strM = %@", strM);
[strM appendString:@"Lion"]; NSLog(@"strM = %@", strM);
}
two:
- (void)deleteCharactersInRange:(NSRange)range;
删除range范围内的字符串
- (void)deleteCharactersInRange
{ NSMutableString *strM = [NSMutableString stringWithString:@"http://www.baidu.com"]; // 一般情况下利用rangeOfString和deleteCharactersInRange配合删除指定内容
NSRange range = [strM rangeOfString:@"http://"];
[strM deleteCharactersInRange:range]; NSLog(@"strM = %@", strM); //打印内容: strM = www.baidu.com}
three:
- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;
在loc这个位置中插入aString
- (void)insertString
{ NSMutableString *strM = [NSMutableString stringWithString:@"www.baidu.com"];
[strM insertString:@"http://" atIndex:0]; NSLog(@"strM = %@", strM); //打印内容: strM = http://www.baidu.com}
four:
- (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;
使用aString替换range范围内的字符串
- (void)replaceOccurrencesOfString
{ NSMutableString *strM = [NSMutableString stringWithString:@"http://www.baidu.com/lion.png"]; NSRange range = [strM rangeOfString:@"lion"];
[strM replaceOccurrencesOfString:@"lion" withString:@"super Man" options:0 range:range]; NSLog(@"strM = %@", strM); //打印内容:strM = http://www.baidu.com/super Man.png}
在iOS8以后,还可以用下面的方法来判断是否包含某字符串:containsString
作者:会跳舞的狮子
链接:https://www.jianshu.com/p/60229365c5c3
點擊查看更多內容
為 TA 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦