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

  • 相关阅读:
    我的WCF之旅(1):创建一个简单的WCF程序
    与众不同 windows phone (15) Media(媒体)之后台播放音频
    与众不同 windows phone (14) Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成
    与众不同 windows phone (10) Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息
    与众不同 windows phone (17) Graphic and Animation(画图和动画)
    与众不同 windows phone (5) Chooser(选择器)
    与众不同 windows phone (26) Contacts and Calendar(联系人和日历)
    与众不同 windows phone (7) Local Database(本地数据库)
    与众不同 windows phone (19) Device(设备)之陀螺仪传感器, Motion API
    与众不同 windows phone (16) Media(媒体)之编辑图片, 保存图片到相册, 与图片的上下文菜单“应用程序...”和“共享...”关联, 与 Windows Phone 的图片中心集成
  • 原文地址:https://www.cnblogs.com/CH520/p/9310837.html
Copyright © 2011-2022 走看看