NSString- 字串物件快速範例

NSString- 字串物件快速範例

NSString -> @”Hello”

NSString 是Objective-C中被使用字串相類處理的物件,它使用Unicode(UTF-16)方式儲存字串,意味著支援多國語言內容,與C的Character有很大的不同,NSString是位於Foundation的Framework之中。

建立字串

後期Objective-C已經支援literal方式建立字串:

//-----------start-----------
    NSString *webSiteName = @"Coding With Danny";
    NSLog(@"%@",webSiteName);
//------------end------------

輸出結果:

2014-12-26 14:58:06.513 ObjC-Test[24519:8873271] Coding With Danny

當然也可以使用instancetype回傳值的方法直接建立,建立過程中已經包含紀憶體配置(alloc)與初始化:

//-----------start-----------
    NSString *webSiteName = @"Coding With Danny";
    NSString *message = [NSString stringWithFormat:@"%@ --",webSiteName];
    NSLog(@"%@",webSiteName);
    NSLog(@"%@",message);
//------------end------------

輸出結果:

2014-12-26 14:58:04.643 ObjC-Test[24519:8873271] Coding With Danny
2014-12-26 14:58:04.643 ObjC-Test[24519:8873271] Coding With Danny --

合併字串

//-----------start-----------
    NSString *webSiteName = @"Coding With Danny";
    NSString *message = [NSString stringWithFormat:@"%@",webSiteName];
    message = [message stringByAppendingString:@" 2014"];
    NSLog(@"%@",webSiteName);
    NSLog(@"%@",message);
//------------end------------

輸出結果:

2014-12-26 14:59:15.186 ObjC-Test[24555:8879388] Coding With Danny
2014-12-26 14:59:15.186 ObjC-Test[24555:8879388] Coding With Danny 2014

搜尋字串

//-----------start-----------
    NSString *webSiteName = @"Coding With Danny";
    NSString *message = [NSString stringWithFormat:@"%@",webSiteName];
    message = [message stringByAppendingString:@" 2014"];
    NSLog(@"字串:%@",message);
    NSRange searchResult = [message rangeOfString:@"2014"];
    if (searchResult.location == NSNotFound) {
        NSLog(@"搜尋字串:2014 未找到");
    } else {
        NSLog(@"搜尋字串:2014 已經找到位於第%lu開始,長度為%lu",searchResult.location,searchResult.length);
    }
//------------end------------

輸出結果:

2014-12-26 15:01:25.832 ObjC-Test[24623:8891369] 字串:Coding With Danny 2014
2014-12-26 15:01:25.833 ObjC-Test[24623:8891369] 搜尋字串:2014 已經找到位於第18開始,長度為4

分割字串

將字串分割所能用的方法有從字串頭開始並指定長度來擷取字串的substringToIndex、指定開始位置並指定長度擷取字串的substringFromIndex及使用window框概念的substringWithRange,NSRage的結構包含位置(Location)、長度(lehgth)。

//-----------start-----------
    NSString *webSiteName = @"Coding With Danny";
    NSString *message = [NSString stringWithFormat:@"%@",webSiteName];
    message = [message stringByAppendingString:@" 2014"];
    NSLog(@"字串:%@",message);
    NSLog(@"     12345678901234567890");
    NSLog(@"從頭擷取前3個字的內容為:%@", [message substringToIndex:3]);
    NSLog(@"從第六個字開始擷取內容到結尾為:%@", [message substringFromIndex:6]);
    NSRange range = NSMakeRange(1, 5);
    NSLog(@"擷取從頭算起第1字之後開始(不包含位置1),長度為5的字串內容為:%@", [message substringWithRange:range]);
    //也可以使用substringToIndex、substringFormatIndex完成substringWithRange的功能
    NSString *stringRange1 = [[message substringFromIndex:1] substringToIndex:5];
    NSLog(@"使用substringFromIndex、substringToIndex達成substringWithRange效果:%@",stringRange1);
//------------end------------

輸出結果

2014-12-26 15:21:18.980 ObjC-Test[25073:8948689] 字串:Coding With Danny 2014
2014-12-26 15:21:18.980 ObjC-Test[25073:8948689]      12345678901234567890
2014-12-26 15:21:18.981 ObjC-Test[25073:8948689] 從頭擷取前3個字的內容為:Cod
2014-12-26 15:21:18.981 ObjC-Test[25073:8948689] 從第六個字開始擷取內容到結尾為: With Danny 2014
2014-12-26 15:21:18.981 ObjC-Test[25073:8948689] 擷取從頭算起第1字之後開始(不包含位置1),長度為5的字串內容為:oding
2014-12-26 15:21:18.982 ObjC-Test[25073:8948689] 使用substringFromIndex、substringToIndex達成substringWithRange效果:oding

取代字串

//-----------start-----------
    NSString *webSiteName = @"Coding With Danny";
    NSString *message = [NSString stringWithFormat:@"%@",webSiteName];
    message = [message stringByAppendingString:@" 2014"];
    NSLog(@"字串:%@",message);
    NSRange range = NSMakeRange(1, 5);
    NSLog(@"擷取從頭算起第1字之後開始(不包含位置1),長度為5的字串內容為:%@ 利用此Range來當做取代的範圍", [message substringWithRange:range]);
    NSString *stringReplaced = [message stringByReplacingCharactersInRange:range
                                                     withString:@"-----"];
    NSLog(@"%@",message);
    NSLog(@"%@",stringReplaced);
//------------end------------

輸出結果:

2014-12-26 15:27:21.149 ObjC-Test[25197:8972430] 字串:Coding With Danny 2014
2014-12-26 15:27:21.149 ObjC-Test[25197:8972430] 擷取從頭算起第1字之後開始(不包含位置1),長度為5的字串內容為:oding 利用此Range來當做取代的範圍
2014-12-26 15:27:21.149 ObjC-Test[25197:8972430] Coding With Danny 2014
2014-12-26 15:27:21.149 ObjC-Test[25197:8972430] C----- With Danny 2014

大小寫轉換:

//-----------start-----------
    NSString *webSiteName = @"Coding With Danny";
    NSString *message = [NSString stringWithFormat:@"%@",webSiteName];
    message = [message stringByAppendingString:@" 2014"];
    NSLog(@"小寫:%@",[message lowercaseString]);
    NSLog(@"大寫:%@",[message uppercaseString]);
//------------end------------

輸出結果:

2014-12-26 15:29:45.682 ObjC-Test[25264:8982469] 小寫:coding with danny 2014
2014-12-26 15:29:45.682 ObjC-Test[25264:8982469] 大寫:CODING WITH DANNY 2014

字串轉數值:

字串轉成數值類型時如果內容非符合要轉換成該類型的數值類型時,轉換後的值為0

//-----------start-----------
    NSString *stringNumber = @"2015";
    NSLog(@"%i",[stringNumber intValue]);
    NSLog(@"%ld",[stringNumber integerValue]);
    NSString *stringMuNumber = @"a201b5包含非字串內容";
    NSLog(@"%i",[stringMuNumber intValue]);
    NSLog(@"%ld",[stringMuNumber integerValue]);
    //
    NSString *stringFloatNumber = @"1";
    NSLog(@"%f",[stringFloatNumber floatValue]);
    stringFloatNumber = @"1.0345";
    NSLog(@"%f",[stringFloatNumber floatValue]);
//------------end------------

輸出結果:

2014-12-26 15:36:23.836 ObjC-Test[25419:9004151] 2015
2014-12-26 15:36:23.836 ObjC-Test[25419:9004151] 2015
2014-12-26 15:36:23.836 ObjC-Test[25419:9004151] 0
2014-12-26 15:36:23.836 ObjC-Test[25419:9004151] 0
2014-12-26 15:36:23.836 ObjC-Test[25419:9004151] 1.000000
2014-12-26 15:36:23.836 ObjC-Test[25419:9004151] 1.034500