zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    git
    *** errRun
    Centos与Debian的安装命令
    HTML基础
    基本的SQL语言
    phpstudy靶场搭建
    Centos7下搭建服务器(apache+mysql+php)
    Centos7设置yum源
    Linux基础
    一个服务器中搭建多个站点
  • 原文地址:https://www.cnblogs.com/CH520/p/9310837.html
Copyright © 2011-2022 走看看