使用NSString类处理不可变字符串。
C样式的字符串由char字符组成,NSString对象由unichar字符组成。unichar字符是符合Unicode标准的多字节字符。使用NSString类更容易开发出具有本地化的应用程序,能够在世界上不同的语言环境下使用。
要使用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对象。
示例一:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *str = @"Programming is fun";
NSLog(@"%@", str);
NSNumber *intNumber = @100;
NSLog(@"%@", intNumber);
}
return 0;
}
示例二:description方法(相当于C#的ToString())
Fraction.h和Fraction.m
参见 http://www.devacg.com/?post=934
Fraction.m
// 重写NSObject的description方法
-(NSString *) description
{
return [NSString stringWithFormat: @"%i/%i", numerator, denominator];
}
main.m
#import <Foundation/Foundation.h>
#import "Fraction.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Fraction *frac = [[Fraction alloc] init];
[frac setTo: 1 over: 3];
NSLog(@"%@", [frac description]);
}
return 0;
}
示例三:处理不可变字符串
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *str1 = @"This is string A";
NSString *str2 = @"This is string B";
NSString *res;
// NSOrderedAscending
// NSOrderedSame,
// NSOrderedDescending
NSComparisonResult compareResult;
// 计算字符串中的字符
NSLog(@"Length of str1: %lu", [str1 length]);
// 将一个字符复制到另一个字符串
res = [NSString stringWithString: str1];
NSLog(@"copy: %@", res);
// 将一个字符串复制到另一个字符串的末尾
str2 = [str1 stringByAppendingString: str2];
NSLog(@"Concatentation: %@", str2);
// 验证两个字符串是否相等
if ([str1 isEqualToString: res] == YES)
NSLog(@"str1 == res");
else
NSLog(@"str1 != res");
// 验证一个字符串是否小于、等于或大于另一个字符串
// caseInsensitiveCompare 比较时忽略大小写
compareResult = [str1 compare: str2];
if (compareResult == NSOrderedAscending)
NSLog(@"str1 < str2");
else if (compareResult == NSOrderedSame)
NSLog(@"str1 == str2");
else // 必须是NSOrderedDescending
NSLog(@"str1 > str2");
// 将字符串转换为大写
res = [str1 uppercaseString];
NSLog(@"Uppercase conversion: %s", [res UTF8String]);
// 将字符串转换为小写
res = [str1 lowercaseString];
NSLog(@"Lowercase conversion: %@", res);
NSLog(@"original string: %@", str1);
}
return 0;
}
示例四:处理不可变字符串
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *str1 = @"This is string A";
NSString *str2 = @"This is string B";
NSString *res;
NSRange subRange;
// 从字符串中提取前3个字符
res = [str1 substringToIndex: 3];
NSLog(@"First 3 chars of str1: %@", res);
// 提取从索引5开始直到结尾的子字符串
res = [str1 substringFromIndex: 5];
NSLog(@"Chars from index 5 of str1: %@", res);
// 提取从索引8开始到索引13的子字符串(6个字符)
res = [[str1 substringFromIndex: 8] substringToIndex: 6];
NSLog(@"Chars from index 8 through 13: %@", res);
// 更简单的方法
res = [str1 substringWithRange: NSMakeRange(8, 6)];
NSLog(@"Chars from index 8 through 13: %@", res);
// 从另一个字符串中查找一个字符串
subRange = [str1 rangeOfString: @"string A"];
NSLog(@"String is at index %lu, length is %lu",
subRange.location, subRange.length);
subRange = [str1 rangeOfString: @"string B"];
if (subRange.location == NSNotFound)
NSLog(@"String not found");
else
NSLog(@"String is at index %lu, length is %lu",
subRange.location, subRange.length);
}
return 0;
}