Foundaton框架-->NSString字符串

一、如何創(chuàng)建字符串

  • 1.通過(guò)字符串常量創(chuàng)建
  • 注意:字符串常量創(chuàng)建多個(gè)相同的字符串,打印出來(lái)地址一樣
     NSString *str1 = @"lm is good man";
    NSString *str11 = @"lm is good man";
    NSLog(@"str1 = %p,str11 = %p", str1,str11);
    
  • 2.通過(guò)alloc initWithFormat 創(chuàng)建
  • 只要調(diào)用alloc就會(huì)在堆內(nèi)存中開辟一塊存儲(chǔ)空間
    NSString *str2 = [[NSString alloc] initWithFormat:@"lm is good man"];
    
  • 3.通過(guò)類工廠方法創(chuàng)建/ stringWithFormat
    • 內(nèi)部其實(shí)就是封裝了alloc init
      NSString *str3 = [NSString stringWithFormat:@"lm"];
      

二、字符串存儲(chǔ)位置

  • 如果是通過(guò)字符串常量創(chuàng)建,那么字符串對(duì)象存儲(chǔ)在常量區(qū)中
  • 如果是通過(guò)alloc initWithFormat/stringWithFormat創(chuàng)建,那么字符串對(duì)象存儲(chǔ)在堆區(qū)中

三、字符串創(chuàng)建URL

  • 方法一:URLWithString
  • 此方法不支持中文,URL含有中文需要轉(zhuǎn)碼
 NSString *path = @"http://www.baidu.com";
 NSURL *url = [NSURL URLWithString:path];
  • 方法二:fileURLWithPath
  • 該方法,系統(tǒng)會(huì)自動(dòng)給我們傳入的字符串添加協(xié)議頭(file://),所以字符串中不需要再寫file://
  • 因?yàn)閁RLWithString不支持中文,但是如果是通過(guò)fileURLWithString方法創(chuàng)建URL,是支持中文的

四、字符串含有中文轉(zhuǎn)碼stringByAddingPercentEscapesUsingEncoding

//含有中文,需要處理
     path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

五、字符串的讀寫

  • 1.字符串寫writeToFile
  • 2.字符串讀stringWithContentsOfFile和stringWithContentsOfURL
  • 如果是URL傳入救得需要協(xié)議頭file

六、字符串的大小比較:compare

  • 比較字符串的內(nèi)容是否相同:isEqualToString
BOOL flag = [str1 isEqualToString:str2];
    NSLog(@"%i", flag);
  • 比較字符串的地址是否相同:flag = (str1 == str2)
flag = (str1 == str2);
    NSLog(@"flag = %i", flag);
  • 比較字符串的大小ASCAII值:compare
  • 比較字符串的大小(無(wú)大小寫):caseInsensitiveCompare

七、字符串搜索

  • 1.判斷是否以什么開頭
 BOOL flag1 = [str hasPrefix:@"ab"];
    NSLog(@"%i", flag1);
  • 2.判斷是否以什么結(jié)尾
 BOOL flag2 = [str hasSuffix:@"sl"];
    NSLog(@"%i", flag2);
  • 3.判斷字符串中是否包含什么字符串
NSRange rang = [str rangeOfString:@"dde"];

    if (rang.location == NSNotFound) {
        NSLog(@"沒有查找到相同字符串");
    }else
    {
        NSLog(@"查找到相同字符串");
        NSLog(@"location:%lu,length:%lu", rang.location,rang.length);

    }

八、字符串截取

  • substringWithRange

    • 1.動(dòng)態(tài)獲取截取的起始位置
    • 2.動(dòng)態(tài)獲取截取的長(zhǎng)度
  • substringFromIndex

    • 從第幾個(gè)位置開始截取, 一直截取到最后
  • substringToIndex

    • 從開頭開始截取, 一直截取到什么位置

九、字符串替換

  • 1.替換:stringByReplacingOccurrencesOfString
  NSString *newStr =  [str2 stringByReplacingOccurrencesOfString:@"a" withString:@"B"];
  • 2.替換首尾: stringByTrimmingCharactersInSet
    //過(guò)濾首尾空格
    NSString *newStr = [str2 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    //過(guò)濾首尾特定的字符串
     NSString *newStr = [str2 stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"a"]];
``

## 十、字符串和路徑
- 1.判斷是否是絕對(duì)路徑
  - isAbsolutePath
- 2.獲取文件路徑中的最后一個(gè)目錄
  - lastPathComponent
- 3.刪除文件路徑中的最后一個(gè)目錄
  - stringByDeletingLastPathComponent
- 4.給文件路徑添加一個(gè)目錄
  - stringByAppendingPathComponent
- 5.獲取路徑中文件的擴(kuò)展名
  - pathExtension
- 6.刪除路徑中文件的擴(kuò)展名
  - stringByDeletingPathExtension
- 7.給文件路徑添加一個(gè)擴(kuò)展名
  - stringByAppendingPathExtension

## 十一.字符串轉(zhuǎn)換「重點(diǎn)」

#### 1.字母大小寫轉(zhuǎn)換
- 1.將字符串轉(zhuǎn)換為大寫--> uppercaseString
- 2.將字符串轉(zhuǎn)換為小寫-->  lowercaseString
- 3.將字符串的首字符轉(zhuǎn)換為大寫--> capitalizedString

#### 2、字符串與基本數(shù)據(jù)類型的轉(zhuǎn)換
 - 字符串轉(zhuǎn)基本數(shù)據(jù)類型-->intValue、floatValue、doubleValue、integerValue、boolValue
NSString *str1= @"5754";
NSString *str2= @"5754.5454";
NSString *str3= @"5754.00";

int int1 = [str1 intValue];
float flo1 = [str2 floatValue];
double dou1 = [str3 doubleValue];

NSLog(@"--str1:%@---int1:%i--int1:%d-", str1, str1.intValue, int1);
NSLog(@"--str2:%@---flo1:%f--flo1:%f-", str2, str2.floatValue, flo1);
NSLog(@"--str3:%@---dou1:%f--dou1:%f-", str3, str3.doubleValue, dou1);
 - 基本數(shù)據(jù)類型轉(zhuǎn)-->通過(guò)字符串的拼接
    NSString *str1= [NSString stringWithFormat:@"基本數(shù)據(jù)類型轉(zhuǎn)字符串%d", int1];
    NSString *str2= [NSString stringWithFormat:@"基本數(shù)據(jù)類型轉(zhuǎn)字符串%d", flag];

    NSLog(@"--str1:%@---int1:%i--int1:%d-", str1, str1.intValue, int1);
    NSLog(@"--%i-,%@", flag, str2);

#### 3、字符串和類名之間的轉(zhuǎn)換
- 類名轉(zhuǎn)字符串-->NSString *NSStringFromClass(Class aClass);
//類名轉(zhuǎn)字符串

NSString *newStr = NSStringFromClass([person class]);
NSLog(@"%@", NSStringFromClass([person class]));
NSLog(@"%@", newStr);

- 字符串轉(zhuǎn)類-->Class __nullable NSClassFromString(NSString *aClassName)
NSString *person = @"person";
NSLog(@"----%@", NSClassFromString(person));

#### 4、字符串和方法名之間的轉(zhuǎn)換
- 方法名轉(zhuǎn)字符串-->NSString *NSStringFromSelector(SEL aSelector);
//方法名轉(zhuǎn)字符串

NSString *newStr = NSStringFromSelector(@selector(test11));
NSLog(@"%@", NSStringFromSelector(@selector(test11)));
NSLog(@"%@", newStr);

- 字符串轉(zhuǎn)方法名-->NSSelectorFromString(NSString *aSelectorName);

#### 5、字符串與NSData直接的轉(zhuǎn)換
- 字符串轉(zhuǎn)字典
NSString *str = @"lm";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
- 字典轉(zhuǎn)字符串

NSData * data;
NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];


#### 6、字符串與數(shù)組的轉(zhuǎn)換「請(qǐng)查看數(shù)組一節(jié)」


#### 7、字符串與字典之間的轉(zhuǎn)換「請(qǐng)查看字典一節(jié)」

#### 8、字符串轉(zhuǎn)換之字符串拼接技術(shù)

- 字符串拼接可以把NSNumber、基本數(shù)據(jù)類型、等等轉(zhuǎn)換成字符串
NSNumber *num = [NSNumber numberWithBool:YES];   
NSString *str = [NSString stringWithFormat:@"NSnumber轉(zhuǎn)換字符串:%@", num];
NSLog(@"%@", str);

#### 6、C語(yǔ)言字符串和OC字符串之間的轉(zhuǎn)換
  - stringWithUTF8String
  - UTF8String


## 十二、字符串的屬性
- 1、字符串的長(zhǎng)度:length
    ```
     NSUInteger length = [str length];
    NSLog(@"%lu",length);
    ```

## 十三、字符串的其他方法
- 7.取出字符串對(duì)應(yīng)位置的字符
  - characterAtIndex:<#(NSUInteger)#>


## 十四、NSMutalbleString基本概念

- NSMutableString是繼承NSString的
- NSString和NSMutableString的區(qū)別
  - NSString是不可變的
  - NSMutableString是可變的
- 創(chuàng)建方法
 - 常用:strM = [NSMutableString stringWithFormat:<#(NSString *), ...#>]

NSMutableString *str = [NSMutableString stringWithFormat:@"我是一個(gè)兵"];


## 十五、NSMutalbleString常用方法

- 1.在字符串后面添加--> appendFormat
NSMutableString *str = [NSMutableString stringWithFormat:@"我是一個(gè)兵"];
[str appendString:@"  保家為人民"];
NSLog(@"%@", str);
- 2.刪除字符串中的什么
  - 我們經(jīng)常利用rangeOfString和deleteCharactersInRange方法配合起來(lái)刪除指定的字

- 3.在520前面插入love這個(gè)單詞
  - insertString

NSRange range = [strM rangeOfString:@"520"];
[strM insertString:@"love" atIndex:range.location];
NSLog(@"strM = %@", strM);

- 4.要求將字符串中的520替換為530
- replaceOccurrencesOfString
- 一般情況下OC方法要求傳入一個(gè)參數(shù)如果沒有*, 大部分都是枚舉
- 一般情況下如果不想使用枚舉的值, 可以傳入0, 代表按照系統(tǒng)默認(rèn)的方式處理

NSUInteger count = [strM replaceOccurrencesOfString:@"520" withString:@"530" options:0 range:NSMakeRange(0, strM.length)];
NSLog(@"strM = %@", strM);
NSLog(@"count = %lu", count);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Objective-C 中核心處理字符串的類是 NSString 與 NSMutableString ,這兩個(gè)類最...
    家振要翻天閱讀 1,564評(píng)論 0 0
  • 1.創(chuàng)建常量字符串 //通過(guò)這種方式創(chuàng)建的字符串只能是不可變的 NSString*str1 =@"不可變的OC字符...
    史思恒o_0閱讀 469評(píng)論 0 1
  • 一、 框架: 系統(tǒng)或者第三方事先寫好的寫很牛X功能的類,把這些類交給我們使用,這些類的集合就叫框架.Foundat...
    _凌浩雨閱讀 331評(píng)論 0 1
  • NSString:不可變字符串 NSMutableString:可變字符串 //c語(yǔ)言中的字符串 char *s ...
    Sunney閱讀 379評(píng)論 0 0
  • 夜已深,老司機(jī)推薦灣灣作家迷男大人的大作…請(qǐng)自行百度
    哲珠閱讀 148評(píng)論 0 1