Foundation NSString常用方法

景高杰
2023-12-01

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 


//
//  main.m
//  NSString
//
//  Created by LiuWei on 15/4/18.
//  Copyright (c) 2015年 LiuWei. All rights reserved.
//

#import <Foundation/Foundation.h>

// 字符串创建的几种方式
void createString();

// 从文件中读取文本并创建字符串
void createStringFromText();

// NSString的导出
void stringExport();

// 字符串大小写处理
void lowerUpperCase();

// 字符串的比较
void compareString();

// 字符串的搜索
void searchString();

// 字符串的截取
void subString();

// 字符串与路径操作
void path();

// 扩展名处理
void extension();

// 其它用法
void others();

int main()
{
    
    // createString();
    // createStringFromText();
    // stringExport();
    // lowerUpperCase();
    // compareString();
    // searchString();
    // subString();
    // path();
    // extension();
    others();
    return 0;
}

#pragma mark - 创建字符串
void createString()
{
    // 以这种方式创建的字符串对象是不需要释放的
    NSString *str1 = @"hello Foundation!";
    NSString *str6 = [NSString stringWithFormat:@"my name is %@, and age is %i", @"lucy", 23];
    NSLog(@"%@", str6);
    NSLog(@"%@", str1);
    
    // 以下字符串在不使用ARC机制的情况下,都要进行手动释放
    NSString *str2 = [[NSString alloc]init];
    str2 = @"[[NSString alloc]init] need to releaes";
    [str2 release];
    
    NSString *str3 = [[NSString alloc]initWithString: @"sring 3"];
    [str3 release];
    
    NSString *str4 = [[NSString alloc]initWithUTF8String: "string 4"];
    [str4 release];
    
    NSString *str5 = [[NSString alloc]initWithFormat:@"a string with format %i, % i", 20, 21];
    [str5 release];
    
}

#pragma mark - 从文件中获取字符串
void createStringFromText()
{
    // 从文件中读取内容
    NSString *path = @"/Users/liuwei/Desktop/testString.txt"; // 文件路径
    NSString *str1 = [NSString stringWithContentsOfFile:path]; // 不能解析中文, 这个方法已经过期
    NSLog(@"%@", str1);
    
    /*
     
    enum {
    NSASCIIStringEncoding = 1,		 0..127 only
    NSNEXTSTEPStringEncoding = 2,
    NSJapaneseEUCStringEncoding = 3,
    NSUTF8StringEncoding = 4,
    NSISOLatin1StringEncoding = 5,
    NSSymbolStringEncoding = 6,
    NSNonLossyASCIIStringEncoding = 7,
    NSShiftJISStringEncoding = 8,          kCFStringEncodingDOSJapanese
    NSISOLatin2StringEncoding = 9,
    NSUnicodeStringEncoding = 10,
    NSWindowsCP1251StringEncoding = 11,     Cyrillic; same as AdobeStandardCyrillic
    NSWindowsCP1252StringEncoding = 12,     WinLatin1
    NSWindowsCP1253StringEncoding = 13,     Greek
    NSWindowsCP1254StringEncoding = 14,     Turkish
    NSWindowsCP1250StringEncoding = 15,     WinLatin2
    NSISO2022JPStringEncoding = 21,         ISO 2022 Japanese encoding for e-mail
    NSMacOSRomanStringEncoding = 30,
    
    NSUTF16StringEncoding = NSUnicodeStringEncoding,      An alias for NSUnicodeStringEncoding
    
    NSUTF16BigEndianStringEncoding = 0x90000100,           NSUTF16StringEncoding encoding with explicit endianness specified
    NSUTF16LittleEndianStringEncoding = 0x94000100,        NSUTF16StringEncoding encoding with explicit endianness specified
    
    NSUTF32StringEncoding = 0x8c000100,
    NSUTF32BigEndianStringEncoding = 0x98000100,           NSUTF32StringEncoding encoding with explicit endianness specified
    NSUTF32LittleEndianStringEncoding = 0x9c000100         NSUTF32StringEncoding encoding with explicit endianness specified
};
typedef NSUInteger NSStringEncoding;
    */
    
    // 指定字符串编码为 NSUTF8StringEncoding
    NSError *error;
    str1 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
    // 如果error中没有值则说明没有错误, 否则说明有错误
    if(error)
    {
        NSLog(@"读取文件失败: %@", error);
    }
    else
    {
        NSLog(@"读取文件成功: %@", str1);
    }
    
    
    NSURL *url = [NSURL URLWithString:@"file:///Users/liuwei/Desktop/testString.txt"];
    NSString *str2 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
    if(error)
    {
        NSLog(@"读取文件失败: %@", error);
    }
    else
    {
        NSLog(@"读取文件成功: %@", str2);
    }
    
    // 解析网页文本
    NSURL *baidu = [NSURL URLWithString:@"http://www.baidu.com"]; // 指定网页路径
    // 按照指定编码从指定网页读取字符串到NSString对象中, 成功error为空, 否则不为空
    NSString *str3 = [NSString stringWithContentsOfURL:baidu encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"%@", str3);
}

#pragma mark - 导出字符串
void stringExport()
{
    NSString *str = @"今天天所真不错呀, 编程什么的最, 么么哒!"; // 要写入文件的字符串
    NSString *path = @"/Users/liuwei/Desktop/abc/testString2.txt"; // 指定要写入字符串的文件名及路径
    NSError *error; // 接收错误代码
    
    // 按照指定编码写入到路径指定的文件中去, 成功error为空, 否则不为空
    // 写入成功会覆盖原来内容, 如果指定的文件不存在则会创建同名称的文件并写入
    // 如果指定的文件夹不存在, 则直接报错
    // 编码指定错误也会报错
    // atomically:YES  进行原子性操作 会创建一个中间的临时文件 以保证安全的写入
    // 文件写入成功返回 YES, 否则返回NO
    [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
    
    if(error)
    {
        // localizedDescription 会以字符串方式返回主要的错误信息
        NSLog(@"写入失败 %@", [error localizedDescription]);
    }
    else
    {
        NSLog(@"写入成功! %@", error);
    }
}

#pragma mark - 大小写处理
void lowerUpperCase()
{
    NSString *str = @"lowercase and uppercase test string!";
    
    // 全部转大写
    str = [str uppercaseString];
    NSLog(@"%@", str);
    
    // 全部转小写
    str = [str lowercaseString];
    NSLog(@"%@", str);
    
    // 首字母变大写 非单词首字母的字母变小写
    str = [@"i aM a tEST sTRING" capitalizedString];
    NSLog(@"%@", str);
    
}

#pragma mark - 字符串的比较
void compareString()
{
    NSString *str1 = @"1234567";
    NSString *str2 = @"1234567";
    
    // 对象方法 isEqualToString 比较两个字符串内容是否相同, 相同返回YES, 否则返回NO
    if ([str1 isEqualToString:str2])
    {
        NSLog(@"两个字符串内容相同");
    }
    else
    {
        NSLog(@"两个字符串内容不相同");
    }
    
    // 比较两字符串大小
    str1 = @"abcd good";
    str2 = @"Abcd good";
    
    // NSComparisonResult
    /*
     typedef NS_ENUM(NSInteger, NSComparisonResult)
    {
        NSOrderedAscending = -1L,
        NSOrderedSame,
        NSOrderedDescending
    };
    */
    
    // compare返回值类型为NSComparisonResult的枚举类型
    NSComparisonResult result = [str1 compare:str2];
    NSLog(@"str1 = \"%@\" compare str2 = \"%@\"", str1, str2);
    switch (result)
    {
        // 升序 代码相比较的两个字符串, 右边的比左边的大
        case NSOrderedAscending:
            NSLog(@"str1 < str2");
            break;
            
        // 两个字符串的内容相同
        case NSOrderedSame:
            NSLog(@"str1 == str2");
            break;
         
        // 降序 代表相比较的两个字符串, 左边的比右边的大
        case NSOrderedDescending:
            NSLog(@"str1 > str2");
            break;
            
        default:
            break;
    }
    
    
    // 忽略大写写进行比较
    result = [str1 caseInsensitiveCompare:str2];
    NSLog(@"%@", @"caseInsensitiveCompare:");
    switch (result)
    {
            // 升序 代码相比较的两个字符串, 右边的比左边的大
        case NSOrderedAscending:
            NSLog(@"str1 < str2");
            break;
            
            // 两个字符串的内容相同
        case NSOrderedSame:
            NSLog(@"str1 == str2");
            break;
            
            // 降序 代表相比较的两个字符串, 左边的比右边的大
        case NSOrderedDescending:
            NSLog(@"str1 > str2");
            break;
            
        default:
            break;
    }
}


#pragma mark - 字符串的搜索
void searchString()
{
    NSString *str = @"NSObject.h";
    
    // 搜索字符串是否以指定字符串开头
    // 是返回YES, 否则返回NO
    NSLog(@"\"%@\" 是否以NS开头: %@", str, [str hasPrefix:@"NS"] ? @"是" : @"否");
    
    // 搜索字符串是否以指定字符串结尾
    // 是返回YES, 否则返回NO
    NSLog(@"\"%@\" 是否以.h结尾: %@", str, [str hasSuffix:@".h"] ? @"是" : @"否");
    
    str = @"123456789678sdf";
    NSRange range;
    range = [str rangeOfString:@"678"]; // 查找指定字符串在串在的范围, 起始索引和长度 如果没找到, location为NSNotFound, length为0
    if (range.length == 0)
    {
        NSLog(@"没找到");
    }
    else
    {
        NSLog(@"找到字串所在范围是: %@", NSStringFromRange(range));
    }
    
    // 从字符串尾部开始搜索
    range = [str rangeOfString:@"678" options:NSBackwardsSearch];
    if (range.length == 0)
    {
        NSLog(@"没找到");
    }
    else
    {
        NSLog(@"找到字串所在范围是: %@", NSStringFromRange(range));
    }
    
    NSRange range2 = NSMakeRange(1, 10);
    // 从指定范围内开始搜索
    range = [str rangeOfString:@"456" options:NSBackwardsSearch range:range2];
    if (range.length == 0)
    {
        NSLog(@"没找到");
    }
    else
    {
        NSLog(@"找到字串所在范围是: %@", NSStringFromRange(range));
    }
    
}

#pragma mark - 字符串的截取
void subString()
{
    NSString *str = @"12345678";
    // 从指定索引处开始截取字符串到尾部
    str = [str substringFromIndex:3];
    NSLog(@"%@", str);
    
    str = @"12345678";
    // 从字符串头部截取到指定索引之前
    str = [str substringToIndex:3];
    NSLog(@"%@", str);
    
    str = @"12345678";
    NSRange range = NSMakeRange(3, 4);
    // 截取指定范围内的字符串 从location开始的length个字符
    str = [str substringWithRange:range];
    NSLog(@"%@", str);
    
    // 分割字符串到数组
    NSString *str2 = @"1-2-3-4-5";
    // 以指定字符为分隔符, 分割后的数值存放在数组中
    NSArray * array = [str2 componentsSeparatedByString:@"-"];
    NSLog(@"%@", array);
    
    NSLog(@"%@", [array objectAtIndex:2]);
    
}

#pragma mark - 字符串与路径操作
void path()
{
    NSMutableArray *components = [NSMutableArray array];
    [components addObject:@"Users"];
    [components addObject:@"LiuWei"];
    [components addObject:@"Desktop"];
    
    // 将数组中各字符串元素拼接成路径
    NSString *path = [NSString pathWithComponents:components];
    NSLog(@"%@", path);
    
    // 把路径切割成数组
    NSArray *components2 = [path pathComponents];
    NSLog(@"%@", components2);
    
    // 判断是否为绝对路径 判断依据路径前边有无 "/"
    NSLog(@"%i", [path isAbsolutePath]);
    
    // 获取路径中最后一个目录
    NSLog(@"%@", [path lastPathComponent]);
    
    // 去掉最后一个目录后得到的目录
    path = [path stringByDeletingLastPathComponent];
    NSLog(@"%@", path);
    
    // 在最后边拼接上一个目录
    path = [path stringByAppendingPathComponent:@"Desktop"];
    NSLog(@"%@", path);

}


#pragma mark - 扩展名处理
void extension()
{
    // 获取扩展名
    NSString *str = @"/Users/LiuWei/Desktop/test.txt";
    NSLog(@"扩展名: %@", [str pathExtension]);
    
    
    // 删掉尾部的扩展名
    str = [str stringByDeletingPathExtension];
    NSLog(@"%@", str);
    
    // 拼接尾部的扩展名
    NSLog(@"%@", [str stringByAppendingPathExtension:@"exe"]);
}


#pragma mark - 其它用法

void others()
{
    // 字符串转整型
    NSString *str = @"1242";
    int num = [str intValue];
    NSLog(@"%i", num);
    
    // 返回字符串字符个数
    str = @"一个字";
    NSLog(@"str 中有 %lu 个字符", [str length]);
    
    // 取出指定索引处的字符
    NSLog(@"%C", [str characterAtIndex:1]);
    
    // 转成C语言字符串
    const char *cstr = [str UTF8String];
    printf("%s", cstr);
}



 类似资料: