iOS-OC-NSString和NSMutableString用法大全

// 創建NSString的常用方法
+ (void)NSStringCreateMethod
{
    // 字符串常量 類似於 char *p = "Hello world";
    // NSString的對象,裏面的內容(字符串)一旦創建,就不能再被改變。
    // string,是一個指向對象的指針,在OC/IOS裏,操作對象,就是指向對象的指針。(string,就是對象),對象自己擁有很多的成員方法調用。每一個NSString的對象,都有這些方法。
    // p是一個指向C字符串的指針(C數組),C庫提供了很多的字符串相關的函數,這些函數並不屬於任何一個C字符串。
    NSString *string = @"Hello world";
    // 用%@,來打印對象
    NSLog(@"string = %@",string);
    
    // 用一個string對象的內容(字符串),來初始化string1。
    NSString *string1 = [[NSString alloc] initWithString:string];
    NSLog(@"string1 = %@",string1);
    // 用一個string對象的內容,來創建string2; initWithString:對應的加方法。
    // 注意:每一個initWithXxxx常對應一個aaaaWithXxxx
    NSString *string2 = [NSString stringWithString:string];
    NSLog(@"string2 = %@",string2);
 
    // 用一個C字符串採用UTF8編碼格式,來初始化string3。
    NSString *string3 = [[NSString alloc] initWithUTF8String:"Hello world"];
    NSLog(@"string3 = %@",string3);
    // 對應的加方法,用一個C字符串,來創建string4
    NSString *string4 = [NSString stringWithUTF8String:"Hello world"];
    NSLog(@"string4 = %@",string4);
 
    // 用一個C字符串,使用NSUTF8StringEncoding(就是UTF8編碼),來初始化string5。相當於initWithUTF8String:
    NSString *string5 = [[NSString alloc] initWithCString:"Hello world" encoding:NSUTF8StringEncoding];
    NSLog(@"string5 = %@",string5);
    // 對應的加方法
    NSString *string6 = [NSString stringWithCString:"Hello world" encoding:NSUTF8StringEncoding];
    NSLog(@"string6 = %@",string6);
 
    // NSLog(NSString *format, ...);
    // printf(const char *restrict, ...);
    // sprintf(char *restrict, const char *restrict, ...);
    // 用一個格式化的內容,來初始化string7,類似sprintf
    NSString *string7 = [[NSString alloc] initWithFormat:@"Hello world %@ %d %s %.2f OK",string, 18, "good", 3.14];
    NSLog(@"Hello world %@ %d %s %.2f OK",string, 18, "good", 3.14);
    NSLog(@"string7 = %@",string7);
    // 對應的加方法
    NSString *string8 = [NSString stringWithFormat:@"%d %c",1024,'X'];
    NSLog(@"string8 = %@",string8);
}
 
/*
 + (id)stringWithString:(NSString *)string
 {
    return [[NSString alloc] initWithString:string];
 }
 */
 
+ (void)NSStringSimpleMethod
{
    NSString *string = @"Hello world";
    // 獲取字符串對象的長度(這個對象裏保存的字符串的長度)
    NSLog(@"%lu",[string length]);
    // OC字符串的長度,指的是OC字符串裏,元素的個數。
    NSString *string1 = @"不作死,就不會死";
    // NSString *string1 = [NSString stringWithUTF8String:"不作死,就不會死"];
    NSLog(@"%lu",[string1 length]);
    
    // 獲取OC字符串裏,對應索引(下標)的元素。
    // OC數組裏,保存的實際上並不是C的字符串,而是unichar的數組。unsigned short,一個元素佔兩個字節。'l':006C, '死': 6b7b
    // OC的數組裏,就不是C字符串,所以,就不需要有尾0.
    unichar c = [string characterAtIndex:2];
    // unichar 我們用%C來打印
    NSLog(@"c = %C",c);
    c = [string1 characterAtIndex:2];
    NSLog(@"c = %C,%x",c,c);
    
    // __NSCFConstantString __NSCFString
    // 看到崩潰日誌,characterAtIndex:崩潰調用的類是如上兩個,實際有多個。說明了,NSString,是由類簇來實現的,像由類簇實現的類,我們不能去繼承。
    // 獲取下標爲8的元素,會崩潰,因爲OC數組每個元素都是unichar格式的,不需要有尾0
    // [string1 characterAtIndex:8];
    // [string1 characterAtIndex:[string1 length]];
    // 注意,上面的方法不用get,因爲get在OC/IOS的方法命名裏尤其特殊的用法
    unichar buf[10] = {0};
    // get在OC/IOS命名裏面的用法如下,不是通過返回值返回,而是通過函數的參數返回內容,用get這個單詞。
    // 將一個range範圍的內容,返回到buf裏面去(不要越界)。
    [string1 getCharacters:buf range:NSMakeRange(2, 6)];
    for (int i=0; buf[i]!=0; i++) {
        NSLog(@"buf[%d] = %C",i,buf[i]);
    }
    
    // 返回一個所有字符都大寫的新的字符串對象
    // NSString這個字符串對象,一旦創建,就無法改變其內容了。
    // 因此這個方法,並不是將string的所有字符大寫,而是創建一個所有字符多大寫的新的對象,返回。
    NSString *string2 = [string uppercaseString];
    NSLog(@"string = %@",string);
    NSLog(@"string2 = %@",string2);
    // 返回一個所有字符都小寫的新的字符串對象
    NSString *string3 = [string2 lowercaseString];
    NSLog(@"string3 = %@",string3);
    // 返回一個所有單詞首字符大寫,其他字符都小寫的新的字符串對象
    NSString *string4 = [@"helloworld,abc doyou do" capitalizedString];
    NSLog(@"string4 = %@",string4);
 
    // 返回從index下標開始,一直到結束的子串(新的字符串對象)。
    // 注意,它包含index下標的字符
    NSString *string5 = [string4 substringFromIndex:[@"hello" length]];
    NSLog(@"string5 = %@",string5);
    // 返回從頭開始,到index下標結束的子串(新的字符串對象)。
    // 注意,它不包含index下標的字符
    NSString *string6 = [string4 substringToIndex:5];
    NSLog(@"string6 = %@",string6);
    // 返回一個從下標爲3開始,長度爲4的子串(新的字符串對象)。
    NSString *string7 = [string4 substringWithRange:NSMakeRange(3, 4)];
    NSLog(@"string7 = %@",string7);
    
    // 返回string4對應的"world"字符串的範圍,如果找到了,返回的是對應的下標和長度,找不到返回NSNotFound
    NSRange range = [string4 rangeOfString:@"world"];
    // 將一個range,轉換成一個NSString的對象。
    NSLog(@"range = %@",NSStringFromRange(range));
    
    range = [string4 rangeOfString:@"world"];
    // 如果range.location等於NSNotFound,則表示沒有找到
    // NSNotFound 是long的最大值
    if (range.location != NSNotFound) {
        NSLog(@"找到了,range = %@",NSStringFromRange(range));
    } else {
        NSLog(@"沒找到,range = %@",NSStringFromRange(range));
    }
    
    // string是一個指針,保存一個字符串對象的地址而已。
    // 不能變的是string指針指向的NSString類型的對象的內容不能變。
    string = @"http://192.168.88.8";
    NSLog(@"string = %@",string);
    
    // 判斷string字符串,是否以@"http"開頭,是返回YES(1),否則返回NO(0)
    if ([string hasPrefix:@"http"]) {
        NSLog(@"這是一個網址!");
    }
    // 判斷@"北京.mp3"字符串,是否以@"mp3"結尾,是返回YES(1),否則返回NO(0)
    if ([@"北京.mp3" hasSuffix:@"mp3"]) {
        NSLog(@"這是一個音樂!");
    }
    
    // 將一個字符串對象轉換爲一個整數/浮點數...
    NSLog(@"%d",[@"  -123abc" intValue]);
    NSLog(@"%.2f",[@" 3.14abc" floatValue]);
}
 
+ (void)NSStringCompareMethod
{
    NSString *string = @"Hello world";
    NSString *string1 = @"hello world";
    // is, has 開頭,一般返回的BOOL
    // 比較string和string1兩個字符串的內容是否相等。
    if ([string isEqualToString:@"Hello world"]) {
        NSLog(@"相等");
    }
    
    /* compare: 返回值是一個枚舉類型,有如下三個枚舉
     NSOrderedAscending = -1L,  升序
     NSOrderedSame,             同序
     NSOrderedDescending        降序
     返回值從string,到string1,是一個什麼增長順序
     */
    if ([string compare:string1] == NSOrderedAscending) {
        NSLog(@"升序!");
    }
    if ([@"abc" compare:@"ABC"] == NSOrderedDescending) {
        NSLog(@"降序!");
    }
    
    // 不區分大小寫比較
    if ([string caseInsensitiveCompare:string1] == NSOrderedSame) {
        NSLog(@"不區分大小寫,他們相等!");
    }
    
    // 比較string和string1,帶比較的參數。
    // 如果options的值爲NSCaseInsensitiveSearch,就等價於caseInsensitiveCompare: 這個方法
    if ([string compare:string1 options:NSCaseInsensitiveSearch] == NSOrderedSame) {
        NSLog(@"不區分大小寫,他們相等!");
    }
    
    if ([@"hello123.txt" compare:@"hello5.txt"] == NSOrderedAscending) {
        NSLog(@"升序");
    }
    
    // 將字符串裏的數字字符,當做一個數值去比較 (123>5)
    if ([@"hello123.txt" compare:@"hello5.txt" options:NSNumericSearch] == NSOrderedDescending) {
        NSLog(@"降序");
    }
    
    // 比較這兩個字符串,既不區分大小寫,又降數字字符當做整數去比較。
    if ([@"HELLO123.txt" compare:@"hello5.txt" options:NSCaseInsensitiveSearch|NSNumericSearch] == NSOrderedDescending) {
        NSLog(@"確實是降序!");
    }
}
/*
 - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask
{
    switch (mask)
    {
        case NSCaseInsensitiveSearch:  0000 0001
            xxxx;
            break;
        case ....:
            ...
            break;
        case NSNumericSearch:          0100 0000
            yyyy;
            break;
        case NSCaseInsensitiveSearch|NSNumericSearch:
                                       0100 0001
            zzzz;
            brea;
    }
    return ...
}
 */
 
// NSString這個類實例的字符串對象,一旦初始化完成,就不能再改變了。 NSMutableString它是可以改變的。
// @interface NSMutableString : NSString NSMutableString是繼承與NSString的,說明,NSString裏的方法,NSMutableString都可以用。
+ (void)NSMutableStringCreateMethod
{
    NSString *string = @"Hello world";
    // 用string的內容,來初始化一個可變的string1字符串。
    // 這個方法,我們也常說成是,將一個不可變字符串,轉成可變字符串。(實際上是創建了一個新的可變字符串對象,只不過裏面的內容,是原來的內容)
    NSMutableString *string1 = [[NSMutableString alloc] initWithString:string];
    NSLog(@"string1 = %@",string1);
    // 用對應的加方法 (注意,參數是NSString類型,但我們傳了一個NSMutableString的對象)
    // 父類的指針,可以指向子類的對象,被稱爲賦值兼容原則。
    // 這樣的賦值是安全的。
    // 但反過來,是不允許的,這樣的賦值是不安全的。
    NSMutableString *string2 = [[NSMutableString alloc] initWithString:string1];
    NSLog(@"string2 = %@",string2);
    
    // 我們從來不再NSString用這倆方法,但NSMutableString就可以用了。
    // 創建了兩個字符串對象,但字符串對象裏的內容爲空。
    // NSString *string3 = [[NSString alloc] init];
    // NSString *string4 = [NSString string];
    // 注意,和NSString *string5 = nil; 是不一樣的。
    
    // 創建一個空的可變字符串
    NSMutableString *string3 = [[NSMutableString alloc] init];
    // 判斷字符串內容爲空的方法
    if ([string3 length] == 0) {
        NSLog(@"字符串的內容爲空");
    }
    NSMutableString *string4 = [NSMutableString string];
    // 另外一種判斷字符串內容爲空的方法
    if ([string4 isEqualToString:@""]) {
        NSLog(@"字符串的內容爲空");
    }
    
    // NSMutableString 自己的創建字符串的方法
    // 創建一個預設字符串長度爲10的可變字符串對象,注意,此時字符串的內容爲空。
    // 如果說,我們創建的字符串對象,能提前確認他的元素的話,我們習慣用initWithCapacity:方法,來預設一個長度。這樣的話,效率更高一些。
    NSMutableString *string5 = [[NSMutableString alloc] initWithCapacity:10];
    NSLog(@"%lu",[string5 length]);
    // 對應的加方法
    NSMutableString *string6 = [NSMutableString stringWithCapacity:10];
    NSLog(@"%lu",[string6 length]);
}
 
+ (void)NSMutableStringSimpleMethod
{
    // 對於可變字符串來說,他的方法就是,增加,刪除,修改,插入。
    NSMutableString *string = [[NSMutableString alloc] init];
    // 追加 (在string的尾部,追加一個字符串的內容)
    [string appendString:@"Hello"];
    NSLog(@"string = %@",string);
    // 在string的尾部,追加一個格式化的字符串內容。
    [string appendFormat:@"%cworld %d",' ',100];
    NSLog(@"string = %@",string);
    
    // 插入
    // 將@"are"字符串,插入到下標爲5的位置
    [string insertString:@"are" atIndex:5];
    NSLog(@"string = %@",string);
    // 將@"Good"字符串,插入到最前面。
    [string insertString:@"Good" atIndex:0];
    NSLog(@"string = %@",string);
    // 可以進行尾插,相當於追加字符串。 (但不能沒有節操)
    [string insertString:@"Bye" atIndex:[string length]];
    NSLog(@"string = %@",string);
    
    // 替換
    // 將Hello開始,到100結束的內容,替換成空格
    // GoodHelloare world 100Bye
    // NSRange range = [string rangeOfString:@"Helloare world 100"];
    // [string replaceCharactersInRange:range withString:@" "];
    NSRange range1 = [string rangeOfString:@"Hello"];
    NSRange range2 = [string rangeOfString:@"100"];
    NSRange range = NSMakeRange(range1.location, range2.location+range2.length-range1.location);
    [string replaceCharactersInRange:range withString:@" "];
    NSLog(@"替換string = %@",string);
    
    // 刪除
    range = [string rangeOfString:@" "];
    // 刪除一個range區域的內容
    [string deleteCharactersInRange:range];
    NSLog(@"string = %@",string);
 
    // 重設字符串的內容,用一個字符串的內容,重設string裏的內容。
    [string setString:@"Hello world"];
    // 注意,不等價於string = @"Hello world";
    NSLog(@"string = %@",string);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章