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对象。

示例一: 

#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;
}

运行测试
111.png

示例二: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;
}

运行测试
111.png

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

#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;
}

运行测试
111.png

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

#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;
}

运行测试
111.png


标签: Objective-C

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号