NSString 字符串
0、字符串常用操作
1、不可变字符串的创建
// 直接创建不可变字符串
/*
在 OC 中,使用 @"XXX" 格式定义的字符串,是保存在常量区的,只要内容相同,内存地址就一致
*/
NSString *string1 = @"bei jing huan ying nin";
// 对象方法创建字符串
NSString *string2 = [[NSString alloc] init];
// 用另一个字符串初始化当前字符串,和 string1 的地址相同
NSString *string3 = [[NSString alloc] initWithString:string1];
// 通过格式化控制初始化字符串
NSString *string4 = [[NSString alloc] initWithFormat:@"age is %d, name is %@", 18, @"chen chao"];
// 类方法创建字符串
NSString *string5 = [NSString string];
// 用另一个字符串初始化当前字符串,和 string1 的地址相同
NSString *string6 = [NSString stringWithString:string1];
// 通过格式化控制初始化字符串
NSString *string7 = [NSString stringWithFormat:@"age is %d, name is %@", 18, @"chen chao"];
// 由 C 语言的字符串创建字符串
NSString *string8 = [[NSString alloc] initWithCString:"bei jing nin hao" encoding:NSUTF8StringEncoding];
NSString *string9 = [[NSString alloc] initWithUTF8String:"bei jing huan ying nin"];
NSString *string10 = [NSString stringWithCString:"bei jing nin hao" encoding:NSUTF8StringEncoding];
NSString *string11 = [NSString stringWithUTF8String:"bei jing huan ying nin"];
// 从 文件 创建字符串
NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Desktop/test.txt"];
NSString *string12 = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];
NSString *string13 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];
// 从 Url 创建字符串
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
NSString *string14 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:NULL];
NSString *string15 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:NULL];
2、字符串长度计算
NSString *str1 = @"zhou dong yu";
// 计算字数长度,不是字符长度
NSUInteger length = [str1 length];
3、字符串成员的引用(取字符)
NSString *str1 = @"zhou dong yu";
// 取第 4 个字符
unichar character = [str1 characterAtIndex:3];
4、字符串的拼接
NSString *str1 = @"chen chao ";
NSString *str2 = @"shuai";
// stringByAppendingString
NSString *str3 = [str1 stringByAppendingString:str2];
// stringByAppendingFormat
NSString *str4 = [str1 stringByAppendingFormat:@"%@", str2];
5、字符串比较
NSString *str1 = @"chen chao";
NSString *str2 = @"CHEN CHAO";
// isEqualToString
BOOL bl = [str1 isEqualToString:str2];
if (bl) {
// 相等
NSLog(@"str1 = str2");
}
else {
// 不等
NSLog(@"str1 != str2");
}
// compare
NSComparisonResult result1 = [str1 compare:str2];
if (result1 == NSOrderedAscending) {
// 小于 -1
NSLog(@"str1 < str2");
}
else if (result1 == NSOrderedSame){
// 等于 0
NSLog(@"str1 = str2");
}
else{
// 大于 1 NSOrderedDescending
NSLog(@"str1 > str2");
}
// caseInsensitiveCompare
// 忽略大小写比较
NSComparisonResult result2 = [str1 caseInsensitiveCompare:str2];
if (result2 == NSOrderedAscending) {
// 小于 -1
NSLog(@"str1 < str2");
}
else if (result2 == NSOrderedSame){
// 等于 0
NSLog(@"str1 = str2");
}
else{
// 大于 1 NSOrderedDescending
NSLog(@"str1 > str2");
}
6、字符串前缀和后缀的判断
NSString *fileName = @"file.txt";
// 前缀
BOOL bl1 = [fileName hasPrefix:@"file"];
// 后缀
BOOL bl2 = [fileName hasSuffix:@".txt"];
7、字符串大小写字符的转换
NSString *str = @"chEN Chao";
// 转大写
NSString *str1 = [str uppercaseString];
// 转小写
NSString *str2 = [str lowercaseString];
// 单词首字母大写
NSString *str3 = [str capitalizedString];
8、字符串转数字
NSString *str = @"12306";
int intValue = [str intValue];
double doubleValue = [str doubleValue];
float floatValue = [str floatValue];
BOOL boolValue = [str boolValue];
NSInteger integerValue = [str integerValue];
long long longLongValue = [str longLongValue];
9、在字符串中查找子串的位置
NSString *str1 = @"bei jing nin hao nin hao";
NSString *str2 = @"ninn";
// 1、从前往后查找,找到第一个即停止查找
NSRange range1 = [str1 rangeOfString:str2];
// 或者 if(range1.length == 0)
if (range1.location == NSNotFound) {
NSLog(@"没有找到 %@", NSStringFromRange(range1));
}
else{
// location 位置,length 长度
NSLog(@"%lu %lu", range1.location, range1.length);
}
// 2、条件查找
/*
NSCaseInsensitiveSearch = 1, // “A”等同于“a”,不分大小写查找
NSLiteralSearch = 2, // Unicode 的点对点比较。它只在所有字符都用相同的方式组成的情况下才会返回相等。
NSBackwardsSearch = 4, // 在字符串的末尾开始反向搜索
NSAnchoredSearch = 8, // 只考虑搜索的起始点(单独使用)或终止点(当与 NSBackwardsSearch 结合使用时)。
这个方法可以用来检查前缀或者后缀,以及大小写不敏感(case-insensitive)或者
音调不敏感(diacritic-insensitive)的比较。
NSNumericSearch = 64, // 它对字符串里的数字排序
NSDiacriticInsensitiveSearch = 128, // “A” 等同于 “Å” 等同于 “Ä.”
NSWidthInsensitiveSearch = 256, // 一些东亚文字(平假名和片假名)有全宽与半宽两种形式
NSForcedOrderingSearch = 512,
NSRegularExpressionSearch = 1024 // 使用正则表达式搜索
*/
// 从后往前查找,找到第一个即停止查找
NSRange range2 = [str1 rangeOfString:str2 options:NSBackwardsSearch];
if (range2.location == NSNotFound) {
NSLog(@"没有找到 %@", NSStringFromRange(range2));
} else {
NSLog(@"%lu %lu", range2.location, range2.length);
}
// 3、在某个范围内查找
// 查找范围
NSRange range = {8, 10};
NSRange range3 = [str1 rangeOfString:str2 options:NSCaseInsensitiveSearch range:range];
if (range3.location == NSNotFound) {
NSLog(@"没有找到 %@", NSStringFromRange(range3));
} else {
NSLog(@"%lu %lu", range3.location, range3.length);
}
10、字符串子串的提取(取子串)
NSString *str = @"今天天气真不错,是风和日丽的,我们下午没有课,是心情也不错";
// 从某个位置开始到结尾
NSString *str1 = [str substringFromIndex:17];
// 从开始到某个位置
NSString *str2 = [str substringToIndex:7];
// 某个范围内
NSRange range = {7, 10};
NSString *str3 = [str substringWithRange:range];
NSRange range1 = [str rangeOfString:@"我们下午没有课"];
NSString *str4 = [str substringFromIndex:range1.location];
11、字符串切割/组合
NSString *str1 = @"chen$chao$ni$hao$ma";
NSString *str2 = @"bei$jing#ni@hao&ma";
NSString *str3 = @"Users/JHQ0228/Desktop";
// 字符串 按照字符 切割
NSArray *arr1 = [str1 componentsSeparatedByString:@"$"];
// 字符串 按照字符集 切割
NSArray *arr2 = [str2 componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"$#@&"]];
// 将字符串 路径分割
/*
自动按照 "/" 分割字符串
*/
NSArray *arr3 = [str3 pathComponents];
// 字符串 组合
NSString *str4 = [arr1 componentsJoinedByString:@" "];
NSString *str5 = [arr2 componentsJoinedByString:@" "];
// 字符串 路径组合
/*
将数组中的元素自动组合成路径,在每个元素之间自动加上 “/”
*/
NSString *str6 = [NSString pathWithComponents:arr3];
12、可变字符串的创建
// 不可变字符串中有的方法
NSMutableString *str1 = [[NSMutableString alloc] init];
// 和 str1 的地址不同
NSMutableString *str2 = [[NSMutableString alloc] initWithString:str1];
// 和 str1 的地址不同
NSMutableString *str3 = [NSMutableString stringWithString:str1];
// 对象方法创建
/*
创建指定长度字符串,预先分配存储空间,提高效率,字符串实际长度可大于指定的长度
*/
NSMutableString *str4 = [[NSMutableString alloc] initWithCapacity:0];
// 类方法创建
/*
创建指定长度字符串,预先分配存储空间,提高效率,字符串实际长度可大于指定的长度
*/
NSMutableString *str5 = [NSMutableString stringWithCapacity:0];
13、字符串的添加
NSMutableString *str = [NSMutableString stringWithCapacity:0];
// 追加
[str appendString:@"bei jing"];
// 格式化追加
[str appendFormat:@", age is %d", 18];
// 插入
[str insertString:@" ren min" atIndex:8];
14、字符串修改(覆盖重写)
NSMutableString *str = [NSMutableString stringWithFormat:@"%@", @"我是大大的好人"];
// 修改整个字符串(覆盖重写)
[str setString:@"bei jing huan ying nin"];
15、字符串的删除
NSMutableString *str = [NSMutableString stringWithFormat:@"%@", @"bei jing ren min huan ying nin"];
NSRange range = [str rangeOfString:@"ren min "];
[str deleteCharactersInRange:range];
16、字符串替换
NSMutableString *str1 = [NSMutableString stringWithFormat:@"%@", @"bei jing ren min huan ying nin"];
// 替换字符串
[str1 replaceCharactersInRange:[str1 rangeOfString:@"huan ying nin"] withString:@"ni hao ma"];
// 查找并替换字符串
[str1 replaceOccurrencesOfString:@"i" withString:@"X" options:NSLiteralSearch range:NSMakeRange(0, [str1 length])];
/*
NSCaseInsensitiveSearch = 1, // “A”等同于“a”,不分大小写查找
NSLiteralSearch = 2, // Unicode 的点对点比较。它只在所有字符都用相同的方式组成的情况下才会返回相等。
NSBackwardsSearch = 4, // 在字符串的末尾开始反向搜索
NSAnchoredSearch = 8, // 只考虑搜索的起始点(单独使用)或终止点(当与 NSBackwardsSearch 结合使用时)。
这个方法可以用来检查前缀或者后缀,以及大小写不敏感(case-insensitive)或者
音调不敏感(diacritic-insensitive)的比较。
NSNumericSearch = 64, // 它对字符串里的数字排序
NSDiacriticInsensitiveSearch = 128, // “A” 等同于 “Å” 等同于 “Ä.”
NSWidthInsensitiveSearch = 256, // 一些东亚文字(平假名和片假名)有全宽与半宽两种形式
NSForcedOrderingSearch = 512,
NSRegularExpressionSearch = 1024 // 使用正则表达式搜索
*/
17、字符串的导出
// 文件路径
NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Desktop/string.txt"];
// 待导出字符串
NSString *str = @"bei jing ni hao";
// 导出字符串
/*
- (BOOL)writeToFile:(NSString *)path
atomically:(BOOL)useAuxiliaryFile
encoding:(NSStringEncoding)enc
error:(NSError **)error;
atomically:原子性,
YES:原子性操作,数据写入文件时先写入临时文件,待数据全部写入临时文件后,再创建并将数据
从临时文件全部剪切到目标文件中。若写入过程中(指往临时文件中写入)发生错误,会删除临时文件。
NO:非原子性操作,数据写入文件时直接创建并写入目标文件。
若写入过程中发生错误,会停止写入,不会删除目标文件,并且不会删除已写入的数据。
error:错误数据。error == nil 时写入成功。
文件不存在时会自动创建,文件夹不存在时会写入错误。
*/
// 不判断是否写入成功
[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
// 判断是否写入成功
NSError *error;
[str writeToFile:[NSHomeDirectory() stringByAppendingString:@"/Desktop/str/string.txt"]
atomically:YES encoding:NSUTF8StringEncoding
error:&error];
if (error) {
NSLog(@"写入失败:%@", error);
// 打印主要错误信息
NSLog(@"写入失败:%@", [error localizedDescription]);
} else {
NSLog(@"写入成功");
}
18、字符串与常用目标互换
19、注意事项
https://www.cnblogs.com/wangbinios/p/7724892.html
https://www.jianshu.com/p/eda4957735ee
NSString 字符串的更多相关文章
- OC NSString(字符串)
OC NSString(字符串) 多行文字字面量 NSString * string = @"abC" @"DEF" @"hjk" @&qu ...
- NSString字符串
要把 “2011-11-29” 改写成 “2011/11/29”一开始想用ios的时间格式,后来用NSString的方法搞定. [string stringByReplacingOccurrences ...
- 【去除NSString 字符串中的空格换行符】
@interface NSString (DeletWhiteSpace) // 返回一个去掉前后空格的字符串或者下划线,如果自己是一个nil 返回@“” - (NSString *)trimming ...
- nsstring字符串重组
// // main.m // 05-字符串重组 // // Created by apple on 14-3-20. // Copyright (c) 2014年 apple. All ri ...
- iOS - OC NSString 字符串
前言 @interface NSString : NSObject <NSCopying, NSMutableCopying, NSSecureCoding> @interface NSM ...
- Objective - C 中NSString (字符串)与C中的字符串转换问题
NSString是一个常用的类,NSString是原生支持unicode C中的字符串 比如char * a = "hello world"; 是utf8类型的, char* d ...
- NSString字符串类型-学习总结
1.字符串的创建 (1)创建常量字符串 NSString *str = @"This is a String"; //str是变量名 (2)创建空的字符串,给字符串赋值 NSStr ...
- 截取NSString字符串
NSString类中提供了这样三个方法用于获取子字符串: – substringFromIndex: – substringWithRange: – substringToIndex: 具体的使用见下 ...
- NSString 字符串操作
//一.NSString /*----------------创建字符串的方法----------------*/ //1.创建常量字符串. NSString *astring = @"Th ...
- 根据NSString字符串长度自动改变UILabel的frame
相信大家都遇到过这种需求.如果一个不慎,容易做成这个模样: 话不多说,上代码. 1.首先,设置UILabel的相关属性 UILabel *tmpLabel = [[UILabel alloc] ini ...
随机推荐
- Jmeter & TICK
背景: 本来只是想在将Jmeter的测试结果写入InfluxDB, 但发现从InfluxDB V1.3后开始, 已经不支持Web Admin interface, 才发现InfluxData 搞了 ...
- Angular5学习笔记 - 配置NG-ZORRO(八)
一.在项目中集成组件 $ cd PROJECT_NAME $ npm install ng-zorro-antd --save 二.在项目中导入组件 直接用下面的代码替换 /src/app/app.m ...
- 【转】 Pro Android学习笔记(八五):了解Package(4):lib项目
目录(?)[-] 什么是lib项目 小例子 Lib的实现 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowing ...
- DCloud-MUI:HBuilder 安装
ylbtech-DCloud-MUI:HBuilder 安装 1.返回顶部 1. 2. 3. 4. 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 7.返 ...
- php大型网站如何提高性能和并发访问
一.大型网站性能提高策略: 大型网站,比如门户网站,在面对大量用户访问.高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器.高性能的数据库.高效率的编程语言.还有高性能的Web容器. ...
- react过渡动画效果的实现,react-transition-group
本文介绍react相关的过渡动画效果的实现 有点类似vue的transition组件,主要用于组件mount和unmount之前切换时应用动画效果 安装 cnpm install react-tran ...
- NodeJs之项目构建(对文件及文件夹的操作)
前提:需要使用:require('fs')引入外部模块 简单的模仿创建一个文件下有多个文件. 首先,准备一个主文件夹 然后,准备放在这个主文件夹下的文件加 在代码中通过对象,数字,json对象来装 代 ...
- C语言学习笔记--数组指针和指针数组
C 语言中的数组有自己特定的类型,数组的类型由元素类型和数组大小共同决定.(如 int array[5]类型为 int[5]) 1.定义数组类型 C 语言中通过 typedef 为数组类型重命名:ty ...
- VC++ 6.0 快捷键
多行注释的快捷键 详细步骤 工具栏上右键-〉Customize-〉“Add-ins and Macro Files”tab页,把SAMPLE前面打上钩-〉“Commands”tab页,Categ ...
- @SuppressWarnings("unused")注解的作用
JDK5.0后的新特性,你在使用IDE如eclipse的时候,当你定义了一个变量如int a=0;但是你后面根本就没有使用到这个变量,这一行的前面会有一个黄色的警告标志,你将鼠标移动到上面会提示“这个 ...