NSString Class Reference

来源:互联网 发布:黑马程序员 如何 编辑:程序博客网 时间:2024/06/05 08:27

        NSString声明了一系列不可变字符串的接口,当通过NSString创建一个字符串时,就代表这个字符串对象是不可变的。当你想使用可变字符串时,可以使用NSMutableString。
        NSString实现了两个通用的方法length和characterAtIndex:。length可以获得字符串的长度;characterAtIndex:可以通过索引获得字符串中指定位置的字符,其索引的起始位置是0。
        NSString还声明查找和比较字符串的接口,而且还声明了NSString转数值类型、组合字符串的接口。

关于NSMutableString的编程介绍详见《NSMutableString Class Reference》


初始化字符串

+ string
- init
- initWithBytes:length:encoding:
- initWithBytesNoCopy:length:encoding:freeWhenDone:
- initWithCharacters:length:
- initWithCharactersNoCopy:length:freeWhenDone:
- initWithString:
- initWithCString:encoding:
- initWithUTF8String:
- initWithFormat:
- initWithFormat:arguments:
- initWithFormat:locale:
- initWithFormat:locale:arguments:
- initWithData:encoding:
+ stringWithFormat:
+ localizedStringWithFormat:
+ stringWithCharacters:length:
+ stringWithString:
+ stringWithCString:encoding:
+ stringWithUTF8String:

#pragma mark - 初始化字符串- (void)testCreatingAndInitializingStrings {    // 空字符串    NSString *string = [NSString string];    string = [[NSString alloc] init];    string = @"";    // 通过字符串生成字符串    string = [NSString stringWithString:string];    string = [[NSString alloc] initWithString:string];    string = string;    // 通过char生成NSString    string = [NSString stringWithUTF8String:"阳君"];    string = [[NSString alloc] initWithUTF8String:"阳君"];    // 组合生成NSString    string = [NSString stringWithFormat:@"%@", @"阳君"];    string = [[NSString alloc] initWithFormat:@"%@", @"阳君"];    // 通过utf-8字符串    string = [NSString stringWithUTF8String:string.UTF8String];    string = [[NSString alloc] initWithUTF8String:string.UTF8String];    // 通过C字符串    const char *cStr = [string cStringUsingEncoding:NSUTF8StringEncoding];    string = [NSString stringWithCString:cStr encoding:NSUTF8StringEncoding];    string = [[NSString alloc] initWithCString:cStr encoding:NSUTF8StringEncoding];}

 

通过NSString路径读取文件内容

+ stringWithContentsOfFile:encoding:error:
- initWithContentsOfFile:encoding:error:
+ stringWithContentsOfFile:usedEncoding:error:
- initWithContentsOfFile:usedEncoding:error:

#pragma mark 测试数据- (NSString *)testData {    // 获取应用中Document文件夹    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    NSString *documentsDirectory = [paths objectAtIndex:0];    // 测试数据    NSString *string = @"阳君;937447974";    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"test.plist"];    NSError *error;    [string writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];    if (error) {        NSLog(@"错误:%@", error.localizedDescription);    }    return filePath;}#pragma mark - 通过NSString路径读取文件内容- (void)testCreatingAndInitializingFromFile {    NSString *filePath = [self testData];    NSError *error;    // 指定编码格式读取    NSString *string = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];    string = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];    // 自动打开,并返回解析的编码模式    NSStringEncoding enc;    string = [NSString stringWithContentsOfFile:filePath usedEncoding:&enc error:&error];    string = [[NSString alloc] initWithContentsOfFile:filePath usedEncoding:&enc error:&error];    if (error) {        NSLog(@"错误:%@", error.localizedDescription);    }}

 

通过NSURL路径读取文件内容

+ stringWithContentsOfURL:encoding:error:
- initWithContentsOfURL:encoding:error:
+ stringWithContentsOfURL:usedEncoding:error:
- initWithContentsOfURL:usedEncoding:error:

#pragma mark 通过NSURL路径读取文件内容- (void)testCreatingAndInitializingFromURL {    NSString *filePath = [self testData];    NSURL *fileUrl = [NSURL fileURLWithPath:filePath];    NSError *error;    // 指定编码格式读取    NSString *string = [NSString stringWithContentsOfURL:fileUrl encoding:NSUTF8StringEncoding error:&error];    string = [[NSString alloc] initWithContentsOfURL:fileUrl encoding:NSUTF8StringEncoding error:&error];    // 自动打开,并返回解析的编码模式    NSStringEncoding enc;    string = [NSString stringWithContentsOfURL:fileUrl usedEncoding:&enc error:&error];    string = [[NSString alloc] initWithContentsOfURL:fileUrl usedEncoding:&enc error:&error];    if (error) {        NSLog(@"错误:%@", error.localizedDescription);    }}

 

通过NSString或NSURL路径写入NSString

- writeToFile:atomically:encoding:error:
- writeToURL:atomically:encoding:error:

#pragma mark 通过NSString或NSURL路径写入NSString- (void)testWritingFileOrURL {    NSString *filePath = [self testData];    NSURL *fileUrl = [NSURL fileURLWithPath:filePath];    NSError *error;    NSString *string = @"阳君;937447974";    // 指定编码格式写入    BOOL write = [string writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];    write = [string writeToURL:fileUrl atomically:YES encoding:NSUTF8StringEncoding error:&error];    if (error) {        NSLog(@"错误:%@", error.localizedDescription);    }}

 

获取字符串长度

length Property
- lengthOfBytesUsingEncoding:
- maximumLengthOfBytesUsingEncoding:

#pragma mark - 获取字符串长度- (void)testGettingLength {    NSString *string = @"阳君;937447974";    // 长度    NSInteger length = string.length;    // 指定编码格式后的长度    length = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];    // 返回存储时需要指定的长度    length  = [string maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding];}

 

获取Characters和Bytes

- characterAtIndex:
- getCharacters:range:
- getBytes:maxLength:usedLength:encoding:options:range:remainingRange:

#pragma mark 获取Characters和Bytes- (void)testGettingCharactersAndBytes {    NSString *string = @"YangJun;937447974";    // 提取指定位置的character    unichar uch = [string characterAtIndex:1];    // 提取Bytes,并返回使用的长度    NSUInteger length = [string maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding];    const void *bytes;    NSRange range = {0, 5};    BOOL gByte = [string getBytes:&bytes maxLength:length usedLength:&length encoding:NSUTF8StringEncoding options:NSStringEncodingConversionAllowLossy range:range remainingRange:nil];    NSLog(@"%d", gByte);    // 有问题    [string getCharacters:&uch range:range];}

 

获取C字符串

- cStringUsingEncoding:
- getCString:maxLength:encoding:
UTF8String Property

#pragma mark 获取C字符串- (void)testGettingCStrings {    NSString *string = @"阳君;937447974";    // 指定编码格式,获取C字符串    const char *c = [string cStringUsingEncoding:NSUTF8StringEncoding];    NSLog(@"%s", c);    // 获取通过UTF-8转码的字符串    const char *UTF8String = [string UTF8String];    NSLog(@"%s", UTF8String);    /** 有线程问题    char *cString;    NSUInteger length = [string maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding];    BOOL bGet = [string getCString:cString maxLength:length encoding:NSUTF8StringEncoding];    NSLog(@"%d, %s", bGet, cString);     */}

 

增加字符串

- stringByAppendingFormat:
- stringByAppendingString:
- stringByPaddingToLength:withString:startingAtIndex:

#pragma mark - 增加字符串- (void)testCombiningStrings {    NSString *string = @"阳君;937447974";    // string后增加字符串并生成一个新的字符串    string = [string stringByAppendingString:@";IOS"];    // string后增加组合字符串并生成一个新的字符串    string = [string stringByAppendingFormat:@";%@", @"OC"];    // string后增加循环字符串,stringByPaddingToLength:完毕后截取的长度;startingAtIndex:从增加的字符串第几位开始循环增加。    string = [string stringByPaddingToLength:30 withString:@";Swift" startingAtIndex:3];}

 

分割字符串

- componentsSeparatedByString:
- componentsSeparatedByCharactersInSet:
- stringByTrimmingCharactersInSet:
- substringFromIndex:
- substringWithRange:
- substringToIndex:

#pragma mark 分割字符串- (void)testDividingStrings {    NSString *string = @"阳君;Yj937447974";    // 根据指定的字符串分割成数组    NSArray<NSString *> *array = [string componentsSeparatedByString:@";"];    // 通过系统自带的分割方式分割字符串    NSCharacterSet *set = [NSCharacterSet lowercaseLetterCharacterSet];    array = [string componentsSeparatedByCharactersInSet:set];    // 没啥用    string = [string stringByTrimmingCharactersInSet:set];    // 返回指定位置后的字符串    string = @"阳君;937447974";    string = [string substringFromIndex:3];    // 返回指定范围的字符串    string = @"阳君;937447974";    NSRange range = {1, 3};    string = [string substringWithRange:range];    // 返回指定位置钱的字符串    string = @"阳君;937447974";    string = [string substringToIndex:3];}

 

查找字符串

- rangeOfCharacterFromSet:
- rangeOfCharacterFromSet:options:
- rangeOfCharacterFromSet:options:range:
- rangeOfString:
- rangeOfString:options:
- rangeOfString:options:range:
- rangeOfString:options:range:locale:
- enumerateLinesUsingBlock:
- enumerateSubstringsInRange:options:usingBlock:

#pragma mark - 查找字符串- (void)testFindingCharactersAndSubstrings {    NSString *string = @"阳君;937447974";    NSRange searchRange = {0, string.length};    NSCharacterSet *set = [NSCharacterSet uppercaseLetterCharacterSet];    // 根据NSCharacterSet查找    NSRange range = [string rangeOfCharacterFromSet:set];    // 根据NSCharacterSet查找,并选择查找模式    range = [string rangeOfCharacterFromSet:set options:NSCaseInsensitiveSearch];    // 根据NSCharacterSet查找,并选择查找模式,以及范围    range = [string rangeOfCharacterFromSet:set options:NSCaseInsensitiveSearch range:searchRange];    // 根据字符串查找    range = [string rangeOfString:@"93"];    range = [string rangeOfString:@"93" options:NSCaseInsensitiveSearch];    range = [string rangeOfString:@"93" options:NSCaseInsensitiveSearch range:searchRange];    range = [string rangeOfString:@"93" options:NSCaseInsensitiveSearch range:searchRange locale:nil];    // block 查找    [string enumerateLinesUsingBlock:^(NSString * _Nonnull line, BOOL * _Nonnull stop) {        NSLog(@"%@", line);        if ([@"93" isEqualToString:line]) {            NSLog(@"search");            *stop = YES;        }    }];    // block查找,可设置查找方式,并得到找到的位置    [string enumerateSubstringsInRange:searchRange options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {        NSLog(@"%@", substring);        if ([@"9" isEqualToString:substring]) {            NSLog(@"location:%d; length:%d", substringRange.location, substringRange.length);            NSLog(@"location:%d; length:%d", enclosingRange.location, enclosingRange.length);            *stop = YES;        }    }];}

 

替换字符串

- stringByReplacingOccurrencesOfString:withString:
- stringByReplacingOccurrencesOfString:withString:options:range:
- stringByReplacingCharactersInRange:withString:

#pragma mark 替换字符串- (void)testReplacingSubstrings {    NSString *string = @"阳君;937447974";    NSRange searchRange = {0, string.length};    // 全局替换    string = [string stringByReplacingOccurrencesOfString:@";" withString:@";;"];    // 设置替换的模式,并设置范围    string = [string stringByReplacingOccurrencesOfString:@";" withString:@"-" options:NSCaseInsensitiveSearch range:searchRange];    // 将指定范围的字符串替换为指定的字符串    string = [string stringByReplacingCharactersInRange:searchRange withString:@"1"];}

 

识别和比较字符串

- caseInsensitiveCompare:
- localizedCaseInsensitiveCompare:
- compare:
- localizedCompare:
- compare:options:
- compare:options:range:
- compare:options:range:locale:
- localizedStandardCompare:
- hasPrefix:
- hasSuffix:
- isEqualToString:
hash Property

#pragma mark - 识别和比较字符串- (void)testIdentifyingAndComparingStrings {    NSString *string = @"阳君;937447974";    NSString *compareStr = @"阳君;837447974";    NSRange searchRange = {0, string.length};    // 比较大小    NSComparisonResult result = [string compare:compareStr];    // 前缀比较    BOOL isHas = [string hasPrefix:@"阳君"];    // 后缀比较    isHas = [string hasSuffix:@"4"];    // 全比较是否相同    isHas = [string isEqualToString:compareStr];    // 通过指定的比较模式,比较字符串     result = [string compare:compareStr options:NSCaseInsensitiveSearch];    // 等价    result = [string caseInsensitiveCompare:compareStr];    // 添加比较范围    result = [string compare:compareStr options:NSCaseInsensitiveSearch range:searchRange];    // 增加比较地域    result = [string compare:compareStr options:NSCaseInsensitiveSearch range:searchRange locale:nil];    // 本地化字符串,再比较    result = [string localizedCompare:compareStr];    result = [string localizedStandardCompare:compareStr];    // NSCaseInsensitiveSearch模式    result = [string localizedCaseInsensitiveCompare:compareStr];    // hash值    NSUInteger hash = string.hash;    NSLog(@"hash:%lu", (unsigned long)hash);}

 

字符串折叠

- stringByFoldingWithOptions:locale:

#pragma mark 字符串折叠- (void)testFoldingStrings {    NSString *string = @"阳君;937447974";    // 前缀检验,如果相同,就返回前缀    string = [string commonPrefixWithString:@"君;" options:NSCaseInsensitiveSearch];}

 

获得共享的前缀

- commonPrefixWithString:options:

#pragma mark 获得共享的前缀- (void)testGettingSharedPrefix {    NSString *string = @"阳君;937447974";    NSString *compareStr = @"阳君;837447974";    // 返回两个字符串相同的前缀    string = [string commonPrefixWithString:compareStr options:NSCaseInsensitiveSearch];}

 

大小写变化

capitalizedString Property
- capitalizedStringWithLocale:
lowercaseString Property
- lowercaseStringWithLocale:
uppercaseString Property
- uppercaseStringWithLocale:

#pragma mark - 大小写变化- (void)testChangingCase {    NSString *string = @"阳君;y937447974J";    NSLocale *locale = [NSLocale currentLocale];    // 全变大写    NSString *result = string.capitalizedString;    // 指定系统环境变化    result =  [string capitalizedStringWithLocale:locale];    // 全变大写    result = string.uppercaseString;    result = [string uppercaseStringWithLocale:locale];    // 全变小写    result = string.lowercaseString;    result = [string lowercaseStringWithLocale:locale];}

 

转数值

doubleValue Property
floatValue Property
intValue Property
integerValue Property
longLongValue Property
boolValue Property

#pragma mark 得到数值- (void)testGettingNumericValues {    NSString *string = @"123";    NSLog(@"doubleValue:%f", string.doubleValue);    NSLog(@"floatValue:%f", string.floatValue);    NSLog(@"intValue:%d", string.intValue);    NSLog(@"integerValue:%d", string.integerValue);    NSLog(@"longLongValue:%lld", string.longLongValue);    NSLog(@"boolValue:%hhd", string.boolValue);}

 

使用路径

+ pathWithComponents:
pathComponents Property
- completePathIntoString:caseSensitive:matchesIntoArray:filterTypes:
fileSystemRepresentation Property
- getFileSystemRepresentation:maxLength:
absolutePath Property
lastPathComponent Property
pathExtension Property
stringByAbbreviatingWithTildeInPath Property
- stringByAppendingPathComponent:
- stringByAppendingPathExtension:
stringByDeletingLastPathComponent Property
stringByDeletingPathExtension Property
stringByExpandingTildeInPath Property
stringByResolvingSymlinksInPath Property
stringByStandardizingPath Property
- stringsByAppendingPaths:

#pragma mark - 使用路径- (void)testWorkingWithPaths {    // 获取应用中Document文件夹    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    NSString *documentsDirectory = [paths objectAtIndex:0];    // 路径拆分为数组中的元素    NSArray<NSString *> *pathComponents = documentsDirectory.pathComponents;    // 将数组中的元素拼接为路径    documentsDirectory = [NSString pathWithComponents:pathComponents];    // 加载测试数据    NSString *string = @"阳君;937447974";    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"test.plist"];    [string writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];    filePath = [documentsDirectory stringByAppendingPathComponent:@"test1.plist"];    [string writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];    // 寻找文件夹下包含指定扩展名的文件路径    NSString *outputName;// 相同的前缀    NSArray *filterTypes = [NSArray arrayWithObjects:@"txt", @"plist", nil];    NSUInteger matches = [documentsDirectory completePathIntoString:&outputName caseSensitive:YES matchesIntoArray:&pathComponents filterTypes:filterTypes];    NSLog(@"找到:%d", matches);    // 添加路径    filePath = [documentsDirectory stringByAppendingPathComponent:@"test"];    // 添加扩展名    filePath = [filePath stringByAppendingPathExtension:@"plist"];    // 是否绝对路径    NSLog(@"absolutePath:%d", filePath.absolutePath);    // 最后一个路径名    NSLog(@"lastPathComponent:%@", filePath.lastPathComponent);    // 扩展名    NSLog(@"pathExtension:%@", filePath.pathExtension);    // 去掉扩展名    string = filePath.stringByDeletingPathExtension;    // 去掉最后一个路径    string = filePath.stringByDeletingLastPathComponent;    // 批量增加路径,并返回生成的路径    pathComponents = [filePath stringsByAppendingPaths:pathComponents];    // 没啥用    string = filePath.stringByExpandingTildeInPath;    string = filePath.stringByResolvingSymlinksInPath;    string = filePath.stringByStandardizingPath;}

 

使用URL

- stringByAddingPercentEncodingWithAllowedCharacters:
- stringByRemovingPercentEncoding

#pragma mark 使用URL- (void)testWorkingWithURLs {    NSString *path = @"阳君/937447974";    NSCharacterSet *set = [NSCharacterSet controlCharacterSet];    // 转%格式码    NSString *string = [path stringByAddingPercentEncodingWithAllowedCharacters:set];    // 转可见    string = string.stringByRemovingPercentEncoding;}

 


其他

参考资料

String Programming Guide
NSString Class Reference

 

文档修改记录

时间 描述 2015-10-21 根据IOS9的NSString API总结

 


版权所有:http://blog.csdn.net/y550918116j

0 0