当前位置: 首页 > news >正文

NSString 字符串

0、字符串常用操作

  • 自动补充方法:当字符串长度不够需要自动补充到一定的位数

  • OC字符串与C语言字符串之间的相互转换

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

转载于:https://www.cnblogs.com/CH520/p/9310837.html

相关文章:

  • md5sum
  • jdbc就是这么简单
  • PhotoPickerDemo【PhotoPicker0.9.8的个性化修改以及使用(内部glide版本号是3.7.0)】...
  • php中类文件名的命名的规则是什么
  • Vue组件定义
  • SQL Server删除distribution数据库
  • 数据驱动的数字化转型:从流程驱动到数据驱动
  • vuex简单总结
  • 两种方式 : VS 如何调试dll中的源码
  • 第四课:Yarn和Map/Reduce配置启动和原理讲解
  • 8.6 11.25-11.27
  • python学习之老男孩python全栈第九期_数据库day001 -- 作业
  • php计算 处理丢失精度问题 保留小数
  • 古诗文网站的网络爬虫编写方式,通过网络爬虫抓去内容
  • MySQL基础知识之增删改查
  • [deviceone开发]-do_Webview的基本示例
  • [译]CSS 居中(Center)方法大合集
  • 【刷算法】从上往下打印二叉树
  • gcc介绍及安装
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • mongo索引构建
  • php中curl和soap方式请求服务超时问题
  • Python - 闭包Closure
  • Python中eval与exec的使用及区别
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 对JS继承的一点思考
  • 多线程 start 和 run 方法到底有什么区别?
  • 解析 Webpack中import、require、按需加载的执行过程
  • 如何选择开源的机器学习框架?
  • 入口文件开始,分析Vue源码实现
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 使用 @font-face
  • 通过npm或yarn自动生成vue组件
  • 通信类
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 怎么将电脑中的声音录制成WAV格式
  • - 转 Ext2.0 form使用实例
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 湖北分布式智能数据采集方法有哪些?
  • ​【已解决】npm install​卡主不动的情况
  • ​虚拟化系列介绍(十)
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #预处理和函数的对比以及条件编译
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • .NET CLR基本术语
  • .NET Core 成都线下面基会拉开序幕
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)