NSString类

作者:追风剑情 发布于:2019-2-28 11:40 分类:Objective-C

使用NSString类处理不可变字符串

C样式的字符串由char字符组成,NSString对象由unichar字符组成。unichar字符是符合Unicode标准的多字节字符。使用NSString类更容易开发出具有本地化的应用程序,能够在世界上不同的语言环境下使用。

目前,unichar字符占用16位,但Unicode标准规定的字符比这个尺寸大。所以在将来,unichar字符可能会大于16位。所以,不要对Unicode字符的大小进行假设。

要使用Objective-C语言创建一个常量字符串对象,需要在字符串开头放置一个@字符:
例如:@"Programming is fun"

可以使用格式化字符%@显示数组、字典和集合的全部内容。

常见的NSString方法
方法 描述
+(instancetype) stringWithContentsOfFile: path  encoding: enc error: err 创建一个新字符串,并将其设置为path指定的文件的内容,使用字符编码enc,如果非零,则返回err中的错误
+(instancetype) stringWithContentsOfURL: url encoding: enc error: err 创建一个新字符串,并将其设置为url的内容,使用字符编码enc,如果非零,则返回err中的错误
+(instancetype) string 创建一个新的空字符串
+(instancetype) stringWithString: nestling 创建一个新的字符串,并将其设置为nsstring
+(NSString *) stringWithFormat: format, arg1, arg2, arg3... 通过指定的format和参数arg1,arg2,arg3...创建一个新字符串
-(instancetype) initWithString: nestling 将新分配的字符串设置为nsstring
-(instancetype) initWithContentsOfFile: path encoding: enc error: err 将字符串设置为path指定的文件的内容
-(instancetype) initWithContentsOfURL: url encoding: enc error: err 将字符串设置为url(NSUrl *) url的内容,使用字符编码enc,如果非零,则返回err中的错误
-(NSUInteger) length 返回字符串中的字符数目
-(unichar) characterAtIndex: i 返回索i的Unicode字符
-(NSString *) substringFromIndex: i 返回从索引i开始直到结尾的子字符串
-(NSString *) substringWithRange: range 根据指定的范围返回子字符串
-(NSString *) substringToIndex: i 返回从该字符串开始直到索引i的子字符串
-(NSComparator *) caseInsensitiveCompare: nestling 比较两个字符串,忽略大小写
-(NSComparator *) compare: nestling 比较两个字符串
-(BOOL) hasPrefix: nestling 测试字符串是否以nsstring开始
-(BOOL) hasSuffix: nestling 测试字符串是否以nsstring结尾
-(BOOL) isEqualToString: nestling 测试两个字符串是否相等
-(NSString *) capitalizedString 返回每个单词首字母大写的字符串(每个单词的其余字母转换为小写)
-(NSString *) lowercaseString 返回转换为小写的字符串
-(NSString *) uppercaseString 返回转换为大定的字符串
-(const char *) UTF8String 返回转换为UTF-8 C样式的字符串
-(double) doubleValue 返回转换为double的字符串
-(float) floatValue 返回字符串表示的双精度浮点数
-(NSInteger) integerValue 返回字符串的NSInteger整数表示
-(int) intValue 返回转换为整数的字符串

说明:
url是一个NSURL对象,path是指明文件路径的NSString对象,nsstring是一个NSString对象,i表示字符串中有效字符数的NSUInteger值,enc指明字符编码的NSStringEncoding对象,err是描述所发生错误的NSError对象,size和opts是NSUInteger,range是指明字符串中有效范围的NSRange对象。

示例一: 

  1. #import <Foundation/Foundation.h>
  2.  
  3. int main(int argc, const char * argv[]) {
  4. @autoreleasepool {
  5. NSString *str = @"Programming is fun";
  6. NSLog(@"%@", str);
  7. NSNumber *intNumber = @100;
  8. NSLog(@"%@", intNumber);
  9. }
  10. return 0;
  11. }

运行测试
111.png

示例二:description方法(相当于C#的ToString())

Fraction.h和Fraction.m
参见 http://www.devacg.com/?post=934

Fraction.m

  1. // 重写NSObject的description方法
  2. -(NSString *) description
  3. {
  4. return [NSString stringWithFormat: @"%i/%i", numerator, denominator];
  5. }


main.m

  1. #import <Foundation/Foundation.h>
  2. #import "Fraction.h"
  3.  
  4. int main(int argc, const char * argv[]) {
  5. @autoreleasepool {
  6. Fraction *frac = [[Fraction alloc] init];
  7. [frac setTo: 1 over: 3];
  8. NSLog(@"%@", [frac description]);
  9. }
  10. return 0;
  11. }

运行测试
111.png

示例三:处理不可变字符串

  1. #import <Foundation/Foundation.h>
  2.  
  3. int main(int argc, const char * argv[]) {
  4. @autoreleasepool {
  5. NSString *str1 = @"This is string A";
  6. NSString *str2 = @"This is string B";
  7. NSString *res;
  8. // NSOrderedAscending
  9. // NSOrderedSame,
  10. // NSOrderedDescending
  11. NSComparisonResult compareResult;
  12. // 计算字符串中的字符
  13. NSLog(@"Length of str1: %lu", [str1 length]);
  14. // 将一个字符复制到另一个字符串
  15. res = [NSString stringWithString: str1];
  16. NSLog(@"copy: %@", res);
  17. // 将一个字符串复制到另一个字符串的末尾
  18. str2 = [str1 stringByAppendingString: str2];
  19. NSLog(@"Concatentation: %@", str2);
  20. // 验证两个字符串是否相等
  21. if ([str1 isEqualToString: res] == YES)
  22. NSLog(@"str1 == res");
  23. else
  24. NSLog(@"str1 != res");
  25. // 验证一个字符串是否小于、等于或大于另一个字符串
  26. // caseInsensitiveCompare 比较时忽略大小写
  27. compareResult = [str1 compare: str2];
  28. if (compareResult == NSOrderedAscending)
  29. NSLog(@"str1 < str2");
  30. else if (compareResult == NSOrderedSame)
  31. NSLog(@"str1 == str2");
  32. else // 必须是NSOrderedDescending
  33. NSLog(@"str1 > str2");
  34. // 将字符串转换为大写
  35. res = [str1 uppercaseString];
  36. NSLog(@"Uppercase conversion: %s", [res UTF8String]);
  37. // 将字符串转换为小写
  38. res = [str1 lowercaseString];
  39. NSLog(@"Lowercase conversion: %@", res);
  40. NSLog(@"original string: %@", str1);
  41. }
  42. return 0;
  43. }

运行测试
111.png

示例四:处理不可变字符串

  1. #import <Foundation/Foundation.h>
  2.  
  3. int main(int argc, const char * argv[]) {
  4. @autoreleasepool {
  5. NSString *str1 = @"This is string A";
  6. NSString *str2 = @"This is string B";
  7. NSString *res;
  8. NSRange subRange;
  9. // 从字符串中提取前3个字符
  10. res = [str1 substringToIndex: 3];
  11. NSLog(@"First 3 chars of str1: %@", res);
  12. // 提取从索引5开始直到结尾的子字符串
  13. res = [str1 substringFromIndex: 5];
  14. NSLog(@"Chars from index 5 of str1: %@", res);
  15. // 提取从索引8开始到索引13的子字符串(6个字符)
  16. res = [[str1 substringFromIndex: 8] substringToIndex: 6];
  17. NSLog(@"Chars from index 8 through 13: %@", res);
  18. // 更简单的方法
  19. res = [str1 substringWithRange: NSMakeRange(8, 6)];
  20. NSLog(@"Chars from index 8 through 13: %@", res);
  21. // 从另一个字符串中查找一个字符串
  22. subRange = [str1 rangeOfString: @"string A"];
  23. NSLog(@"String is at index %lu, length is %lu",
  24. subRange.location, subRange.length);
  25. subRange = [str1 rangeOfString: @"string B"];
  26. if (subRange.location == NSNotFound)
  27. NSLog(@"String not found");
  28. else
  29. NSLog(@"String is at index %lu, length is %lu",
  30. subRange.location, subRange.length);
  31. }
  32. return 0;
  33. }

运行测试
111.png


标签: Objective-C

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号