免费开源的iOS开发学习平台

OC字符串对象:1-NSString类

在Foundation框架中,处理字符串的类就是NSString和NSMutableString。这两个类完成了Objective-C中与字符串相关的核心功能处理。而NSString和NSMutableString两个类最主要的区别是NSString类的字符串对象,在创建赋值后不能动态修改长度和内容,除非重新赋值。而NSMutableString类似于链表,在创建赋值后可以进行修改长度、插入、删除等操作。

基本介绍

在使用任何语言进行程序开发,字符串的处理都是一个最常用,也是最基本的操作。在Foundation框架中,提供了一个名为NSString的类,用于处理字符串对象。另外NSString类有一个子类--NSMutableString类,用于处理可变长度的字符串。

在NSString类以及其子类NSMutableString中,定义了诸多与字符串相关的属性以及方法,这些属性和方法会用于字符串的创建、对比、搜索以及修改。

创建字符串对象

在NSString中,提供了多个用于字符串创建的方法。但是在实际的开发过程中,通常可以使用如下几种方式来创建一个字符串对象。

  • 创建字符串的简便方法,使用@"",把字符串写在引号内
NSString *webSite = @"www.99ios.com";
  • 使用stringWithFormat:方法
+ (instancetype)stringWithFormat:(NSString *)format, ... ;

例如:

NSString *string1 = [NSString stringWithFormat:@"www.99ios.com"];
  • 使用stringWithUTF8String:方法,需要注意的是,调用该方法时,传入的参数是一个字符串,而不是字符串对象(不需要添加@)
+ (nullable instancetype)stringWithUTF8String:(const char *)nullTerminatedCString;

例如:

NSString *string2 = [NSString stringWithUTF8String:"九九学院"];
  • 使用initWithFormat:方法
- (instancetype)initWithFormat:(NSString *)format, ... ;

例如:

NSString *string3 = [[NSString alloc] initWithFormat:@"www.99ios.com"];
  • 使用initWithUTF8String:方法
- (nullable instancetype)initWithUTF8String:(const char *)nullTerminatedCString;

例如:

NSString *string4 = [[NSString alloc] initWithUTF8String:"九九学院"];

字符串比较

在实际开发中,经常会涉及到字符串之间进行比较操作,例如:判断两个字符串是否相同,是否有包含关系等。在NSString类中也提供了用于字符串比较的方法。

  • 判断字符串是否相同,使用isEqualToString方法
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *string1 = @"www.99ios.com";
        NSString *string2 = @"www.99ios.com";
        //字符串比较
        if ([string1 isEqualToString:string2]) {
            NSLog(@"string1 与 string2 相等");
        }
    }
    return 0;
}

运行结果:

  • 判断字符串中是否包含某个字符串,使用containsString方法
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *string = @"www.99ios.com";
        //字符串是否包含
        if ([string containsString:@"99ios"]) {
            NSLog(@"string中包含字符串99ios!");
        }
    }
    return 0;
}

运行结果:

  • 使用hasPrefix:与hasSuffix:方法,判断字符串的开头与结尾
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *string = @"www.99ios.com";
        //判断字符串是否以某个字符串开头/结尾
        if ([string hasSuffix:@"com"]) {
            NSLog(@"string1以com结尾");
        }
        if ([string hasPrefix:@"www"]) {
            NSLog(@"string1以www开头");
        }
    }
    return 0;
}

运行结果:

字符串的拼接与截取

在开发中,我们时常会涉及到对选定字符串进行截取操作,常见的截取有如下三种方式。

  • 使用substringFromIndex:方法, 获得从指定索引位置开始的字符串,传入的参数表示开始截取的位置,最终截取得到的字符串中不包括参数表示位置的字符

  • 使用substringToIndex方法,获得从字符串开始到指定索引之间的字符串,最终截取得到的字符串中不包括参数表示位置的字符;

  • 从中间截取一段字符串,使用substringWithRange:方法,需要传入一个NSRange类的参数,用于指明截取的范围。

在下方的示例代码中,介绍了以上3种需要掌握的截取字符串的方法。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *string = @"www.99ios.com";
        //字符串截取
        NSString *subString1 = [string substringFromIndex:4]; //结果:99ios.com
        
        NSString *subString2 = [string substringToIndex:3]; //结果:www
        
        NSRange range = NSMakeRange(4, 5);  //从第4位开始截取,截取5位
        NSString *subString3 = [string substringWithRange:range]; //结果:99ios
        NSLog(@"subString1:%@",subString1);
        NSLog(@"subString2:%@",subString2);
        NSLog(@"subString3:%@",subString3);
    }
    return 0;
}

运行结果:

关于字符串的其他操作

对于NSString类,除了创建字符串对象、对字符串比较以及截取字符串之外,还有如下几个针对字符串的属性和方法相对常用,建议初学者掌握。

  • 使用length属性,获取字符串的长度
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *string = @"www.99ios.com";
        NSLog(@"字符串的长度:%ld",string.length);
    }
    return 0;
}

运行结果:

  • 使用integerValue方法实现数字字符串与数字的转换
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //数字字符串转数字,int与NSString转换
        NSString *numberString = @"99";
        NSInteger number = [numberString integerValue];
        NSLog(@"number:%ld",(long)number);
    }
    return 0;
}

运行结果:

示例代码

https://github.com/99ios/4.2.1