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

原文地址:https://www.cnblogs.com/CH520/p/9310837.html