NSString

来源:互联网 发布:hmcl启动器 linux 编辑:程序博客网 时间:2024/06/06 03:07
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,NSUIntegerlen) {
   
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*)replacementNS_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 = [str15compare: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);


0 0
原创粉丝点击