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
文档修改记录
版权所有:http://blog.csdn.net/y550918116j
- NSString Class Reference
- nsstring 转 class class 转 nsstring
- Numeric Character Reference转NSString
- NSString-OC+class
- NSString 与 Class 互转
- QProcess Class Reference
- UITableView Class Reference
- CCTransitionScene Class Reference
- UIPageControl Class Reference翻译
- Hierarchical_State_Machine Class Reference
- UIViewController Class Reference
- QTableModel Class Reference
- QwtSplineCurveFitter Class Reference
- UITabBarController Class Reference
- wxAppConsole Class Reference
- UIViewController Class Reference
- QPrinter Class Reference
- QWebView Class Reference
- 2015年ccpc赛后总结:
- script标签到底该放在哪里
- iOS讲解迷惑 -- XMPP--登录注册
- 在RedHat 6.x和7.x上用编译ffmpeg
- 函数、全局变量、局部变量和返回值的介绍与使用注意
- NSString Class Reference
- 黑马程序员——C语言日志——条件编译指令
- 调试工具BTrace 的使用--例子
- win8.1+MATLAB安装步骤
- struts2拦截器 默认拦截器 默认跳转 全局异常
- 操作系统学习笔记:文件系统实现
- LeetCode43——Multiply Strings
- [教程] IDEA13 + Maven 3.1 + Tomcat 7 + jrebel热部署web应用【JRebel无法安装时】
- MIT 做了一个全自动的大数据分析系统