1. 创建字符串:
NSString*str = [[NSStringalloc]init];
NSString*str1 = [NSStringstring];
以上为使用初始化方法和便利构造器生成NSString对象, 在栈区: 0x7fff7a15ab90
NSString*str2 =
@"你好";
以上为使用字面量快速生成NSString对象, 在静态区:
0x100004190
NSString*str3 = [[NSStringalloc]initWithString:@"这是一个字符串"];
// Using 'initWithString:' with a literal is redundant
NSString*str4 = [NSStringstringWithString:@"this
is another NSString”];
// Using 'stringWithString:' with a literal is redundant
系统报出警告: Using 'stringWithString:' with a literal is redundant
建议使用字面量进行直接进行赋值
2. 计算字符串长度:
NSLog(@"%lu",
str4.length);
length 为 NSUInteger 类型的属性:
@property(readonly)NSUIntegerlength;
3. 字符串截取:
- (NSString*)substringFromIndex:(NSUInteger)from;
从指定下标开始截取, 包含指定下标处的字符
- (NSString*)substringToIndex:(NSUInteger)to;
截取到指定下标, 不包含指定下标
- (NSString*)substringWithRange:(NSRange)range;
使用NSMakeRange方法定义一个NSRange类型的变量, 即定义一个范围, 范围规定了开始下标(含)和截取长度.
NSRange结构体的定义:
typedefstruct_NSRange {
NSUInteger location; NSUInteger length; } NSRange;
|
NSMakeRange方法的定义:
NS_INLINENSRangeNSMakeRange(NSUIntegerloc,
NSUInteger
len) {
NSRange r; r.location= loc; r.length= len; return r; }
|
4. 将任意类型转换为NSString (万能拼接):
- (instancetype)initWithFormat:(NSString*)format,
...
NS_FORMAT_FUNCTION(1,2);
初始化方法
+ (instancetype)stringWithFormat:(NSString*)format,
...
NS_FORMAT_FUNCTION(1,2);
便利构造器
NSString*str7 =
@"is a string";
NSString*str8 = [NSStringstringWithFormat:@"str7,
%@, %d times", str7,5];
printf("%p\n",
str8);
打印结果: 0x100106990 —>静态区
|
chara[] =
"iPhone";
NSString*str9 = [NSStringstringWithFormat:@"%s",
a];
printf("%p\n",
str9);
打印结果: 0x656e6f68506965 —>栈区
|
stringWithFormat方法会经常用到, 用以拼接URL
5. 字符串的比较(是否相等):
- (BOOL)isEqualTo:(id)object;
== 比较的是字符串的地址,
isEqualTo 方法比较的是字符串的内容
6. 字符串的替换:
- (NSString*)stringByReplacingOccurrencesOfString:(NSString*)target
withString:(NSString*)replacement
NS_AVAILABLE(10_5,2_0);
NSString*str13 =
@"123abc";
NSString*str14 = [str13stringByReplacingOccurrencesOfString:@"3ab"withString:@"
replaced "];
|
7. 字符串的比较(升序降序):
- (NSComparisonResult)compare:(NSString*)string;
compare方法返回值为枚举类型:
typedefNS_ENUM(NSInteger, NSComparisonResult)
{NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending};
NSOrderedAscending -- 升序 —1
NSOrderedSame -- 相等 0
NSOrderedDescending -- 降序 1
NSComparisonResultresult = [str15
compare:str16];
if(NSOrderedAscending==
result) {
NSLog(@"这是升序");
}
|
8. 可变字符串:
学习一个新类, 先看其继承关系, 再看其初始化方法
@interfaceNSMutableString :
NSString
NSMutableString类继承自NSString类, 因此可以使用NSString类中的全部方法
NSMutableString*str19 = [NSMutableStringstringWithFormat:@"nihao"];
NSMutableString*str20 = [NSMutableStringstringWithString:@"nihao"];
使用便利构造器stringWithFormat和stringWithString生成可变字符串对象,
若使用字面量, 会报警告: Incompatible pointer types initializing 'NSMutableString *' with an expression of type 'NSString *'
因为指针类型不一样, 字面量为不可变字符串类型, 不能赋给可变字符串类型. 数组同理.
可变和不可变:
- 不可变字符串的修改操作, 本质就是得到一个新的字符串, 对其操作的方法都有NSString *类型的返回值, 需要一个新的字符串对象来接收
- 可变字符串修改原字符串, 其修改方法没有返回值
9. 追加字符串:
- (void)appendFormat:(NSString*)format,
...
NS_FORMAT_FUNCTION(1,2);
NSString*strTemp =
@"chi le ma?";
[str19
appendFormat:@"%@", strTemp];
NSLog(@"%@",
str19);
|
10. 插入字符串:
- (void)insertString:(NSString*)aString
atIndex:(NSUInteger)loc;
在指定下标之前插入
NSString*strTemp =
@"chi le ma?";
[str19
insertString:@" bu "atIndex:1];
NSLog(@"%@",
str19);
|