1. 程式人生 > >OC不可變字串和可變字串(1)

OC不可變字串和可變字串(1)

在OC中,字串有:不可變字串(NSString)、可變字串(NSMutableString)。
可變字串的方法繼承於不可變字串。

可變字串

1.初始化一個字串物件(除以下方法外,還可以使用alloc init來初始化字串)

NSString *string1 = @"Gene";
//stringWithFormat可用於字串的順序拼接
NSString *string2 = [NSString stringWithFormat:@"%@ %@ %@",@"1",@"2",string1];

2.使用NSString的類方法來建立字串
2.1從資料夾中獲取字串

//先建立一個檔案路徑path1
NSString *path1 = @"/Users/Gene/Desktop/hello.html"; //引數一輸入檔案路徑 encoding是編碼(此處直接輸入國家編號)error 當無法通過路徑名搜尋到檔案時,進行報錯。 NSString *string5 = [NSString stringWithContentsOfFile:path1 encoding:NSUTF8String Encoding error:nil];

輸出結果:這裡寫圖片描述
2.2從網頁獲取字串

NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
NSString
*string6 = [NSString stringWithContentsOfURL:url encoding:4 error:&error];

2.3字串的操作
2.3.1擷取字串

//建立一個字元竄
NSString *string7 = @"life is simple,You make choices and don't look back";
//獲取字串的長度
NSUInteger length = string7.length;
//substringToIndex,從擷取位置為0-4的字元,但不包括5
NSString *subString1 = [string7 substringToIndex:5
]; //擷取字串中從7(from)的位置到結尾的字串,包括from的位置 NSString *subString2 = [string7 substringFromIndex:7]; //擷取從位置3開始,長度為6的字元竄 NSString *subString3 = [string7 substringWithRange:NSMakeRange(3, 6)]; /*------------------------*/ //獲取字串中的某個字元 NSString *string8 = @"abcdefg"; //根據字串中的位置index來獲得一個字元,注意:字串的索引是從 0 開始 char c =[string8 characterAtIndex:7];

2.3.2字串的比較
比較兩個字串,判斷這兩個字串是否相等
ex:subString2 == subString3。其中,使用“==”判斷時,需要等號兩邊的字串的內容以及指標都相同。
通過淺拷貝,可以得出一個指標相同且內容相同的另一個字串:

NSString *subString4 = [NSString stringWithString:subString2];

相對的,通過深拷貝,則可以得出一個只是內容相同,指標都不相同的字串:

NSString *subString5 = [NSString stringWithFormat:subString2];

淺拷貝中,兩個字串是會互相影響的。而深拷貝相當於重新克隆出一個字串,其指標發生了改變,而內容來源於上一個字串,且相互不影響。
比較兩個字串(在實際開發中,通常只需要比較兩個字串的內容是否相等):

if ([subString2 isEqualToString:string4]) {
            NSLog(@"subString2 與 subString4 內容相等");
        }
        else{
            NSLog(@"subString2 與 subString4 內容不相等");
        }

比較兩個字串的大小,注意是大小

//建立兩個字串
NSString *cmpString1 = @"hehehe";
NSString *cmpString2 = @"haha";
//compare,比較字串1和字串2,返回的是列舉型別
NSComparisonResult result = [cmpString1 compare:cmpString2];
switch (result) {
   case NSOrderedAscending:{
      NSLog(@"cmpString1 < cmpString2 ,升序");
          break;
         }
   case NSOrderedSame:{
      NSLog(@"cmpString = cmpString 相同");
           break;
         }
   case NSOrderedDescending:{
       NSLog(@"cmpString1 > cmpString2 ,降序");
          break;
          }
        default:
          break;
  }

2.3.3根據字串拿到對應的range(location,length)

NSRange range = [string7 rangeOfString:@"simple"];

輸出結果:這裡寫圖片描述
如果被搜尋字元竄在該字元竄中有多個,那麼,只輸出第一個遇到該字元竄的位置以及該字串的長度。
2.3.4判斷字串中是否有xx字首 或者 xx字尾

//判斷字首
 NSString *string12 = @"http://www.baidu.com";

        if ([string12 hasPrefix:@"http://"]) {
            NSLog(@"含有此字首");
        }
        else{
            NSLog(@"不含有此字首");
        }
//判斷後綴
NSString *string13 = @"xxxxxx.jpg";
        if ([string13 hasSuffix:@"jpg"] || [string13 hasSuffix:@"png"]) {
            NSLog(@"是圖片檔案");
        }
        else{
            NSLog(@"不包含此後綴");
        }

2.3.4字串的拼接

  NSString *string14 = @"www.baidu.com";
  //在字串前拼接 
  NSString *string15 = [@"http://" stringByAppendingString:string14];

  NSLog(@"%@",string15);

  NSString *string16 = @"http://static.bigstockphoto.com";

  NSString *string17 = @"images/homepage/2016_popular_photo_categories.jpg";
  //連線兩個字串,並且第二個字串是按一定格式傳進來的
  NSString *string18 = [string16 stringByAppendingFormat:@"/%@",string17];
  //如果要拼接的是資料夾,可以使用stringByAppendingPathComponent
  NSString *string19 = [string16 stringByAppendingPathComponent:string17];

2.3.5字串的其他常用方法

//1.字串的轉換函式
        NSString *str = @"111addd333";
        //如果字串裡面有數字也有字母,會將字母之後的全部砍掉
        int a1 = [str intValue];
        NSLog(@"%d",a1);

        //2.字串的大小寫轉換
        NSString *str2 = @"aaaabbsssee";
        //全部改成小寫
        str2 = [str2 uppercaseString];
        NSLog(@"%@",str2);
        //全部改成大寫
        str2 = [str2 lowercaseString];
        NSLog(@"%@",str2);
        //首字母大寫,其他小寫
        str2 = [str2 capitalizedString];
        NSLog(@"%@",str2);


        //替換
        str2 = [str2 stringByReplacingOccurrencesOfString:@"bb" withString:@"dd"];
        NSLog(@"%@",str2);
        //替換
        str2 = [str2 stringByReplacingCharactersInRange:NSMakeRange(1, 2) withString:@"GGGGG"];
        NSLog(@"%@",str2);

        //以separator 為分隔符,將元字元竄內容進行分割,分割得到的結果放到一個數組裡面,作為返回值
        NSString *str8 = @"aa-bb-cc-dd-ee";
        NSArray *arry = [str8 componentsSeparatedByString:@"-"];

相關推薦

《UNIX環境高級編程》讀書筆記之系統數據文件信息1

返回 -m 獲取 高級編程 記得 clas oid data- size 1.UNIX系統口令文件包括了下圖所看到的的各字段,這些字段包括在<pwd.h>中定義的passwd結構體中 POSIX定義了兩個獲取口令文件項的函數。在給出用戶登錄名或用戶ID後

第6章 靜態路由動態路由1_靜態路由

align 將在 跟蹤 添加 測試 字母 ppp協議 必須 缺少 1. 路由——網絡層實現的功能 1.1 路由功能 (1)網絡層的功能:給傳輸層協議提供簡單靈活的、無連接的、盡最大努力交付的數據包服務。 (2)路由器為每一個數據包單獨地選擇轉發路徑,網絡層並不提供服務質量的

python入門學習-列表元組1

索引 個人 .so .cn pytho 入門 main 範圍 mage 數據結構是通過某種方式(例如對元素進行編號)組織在一起的數據元素的集合。這些數據元素可以是數字或者字符,甚至可以是其他數據結構。 在python中,最基本的數據結構是序列(seque

C# 《四》表達式運算符1

center key 操作 mes string src ring mage ons 1、表達式 1、將變量和字面值(在使用運算符時,它們都稱作操作數)與運算符組合起來就得到了表達式,它是計算的基本構件。 2、簡單的操作包括所有的基本數學操作,如加減乘除;還有專門用於處理布

表、棧隊列1

移除 clas for循環 set 基本 棧和隊列 返回 異常 -m 目錄 1、抽象數據類型 2、表ADT 2.1、表的簡單數組實現 2.2、簡單鏈表 3、Java Collections API中的表 3.1、Collection接口 3.2、Iterator接口 3

Armv8-A虛擬化:效能構架分析1

微信公眾號 mindshare思享 本文基於一篇國外大學研究arm虛擬化的論文(論文下載會稍後給出),探討armv8虛擬化技術,KVM,Xen實現和效能分析,與x86的比較。這個研究幫助了arm改進了虛擬化支援的構架,並在armv8.1中採用。 摘要 arm伺服器的流行,

flowable EngineConfiguration的作用繼承關係1

EngineConfiguration 是flowable引擎的核心部件。 在 flowable 中,實現引擎配置的頂層類是 AbstractEngineConfiguration 這是一個抽象類。 一、作用 1、第一個作用是配置引擎使用的資料庫資訊。 protected

0016_光源打光1

條光: 從側面打光 條光照射寬度最好大於檢測物體的寬度 條光的安裝高度會影響到條光的長度,高度越高,條光的長度越長。 環形光: 安裝高度越高,要求環形光的直徑越大 瞭解光源安裝距離,過濾掉某些角度光源:例如要求光源安裝尺寸高,就可以過濾掉大角度光源,選擇用小角

C++學習之迴圈關係表示式1

在c語言中我這部分還算學習的挺好,所以這部分我只新增一些我不太懂的點: 1.通常,cout在顯示bool值之前將它們轉換為int,但是在前面使用cout.setf(ios:boolalpha)函式呼叫設定了一個標記,該標記命令cout顯示true和false,而不是1和0;

#C語言基礎知識歸納例題分析1

## C語言基礎知識歸納和例題分析(1) 計算機程式和計算機語言 1.程式 就是一組計算機能識別和執行的指令 2.計算機語言經歷的幾個階段 機器語言(直接執行)→符號語言(又稱組合語言)→高階語言 3.高階語

MongoDB資料庫關係表示設計:1巢狀文件引用連結

使用資料的時候,一個數據項常常和另外的一個或多個數據項產生關係,比如一個“人”物件,有一個名字,可能有多個電話號碼,以及多個子女,等等。 在傳統的SQL資料庫中,關係被分為一個個表(table),在表中,每個資料項以主鍵(primary key)標識,而一個表的主鍵又

3D數學 ---- 矩陣線性變換1

包含平移的線性變換稱作仿射變換,3D中的仿射變換不能用 3 x 3 矩陣表達,必須使用4 x 4矩陣。 一般來說,變換物體相當於以相反的量變換描述這個物體的座標系。當有多個變換時,則需要以相反的順序變換相反的量。例如,將物體順時針旋轉20度,擴大200%,等價於將座標系縮小2

BigData_A_A_03-YARN-資源管理任務排程1

楔子 計算每個月溫度最高的2天 data 資料 code https://github.com/qianlicao51/hd/tree/master/src/main/java/cn/sxt/day1/hdfs/weather 比較時使用了 apa

圖形介面程式設計 分組容器卡片容器1

——本節介紹瞭如何使用分組容器(GroupBox)以及一個分組RadioButton的例項 1 分組容器 GroupBox容器使用起來就和一個基本的Panel容器一樣,它不具備佈局管理功能,僅僅是一個可以容納其它控制元件的容器。 Grou

基於TensorFlow的Cats vs. Dogs貓狗大戰實現詳解1

2017.5.29   官方的MNIST例子裡面訓練資料的下載和匯入都是用已經寫好的指令碼完成的,至於裡面實現細節也沒高興去看原始碼,感覺寫得太正式,我這個初學者不好理解。於是在優酷上找到了KevinRush這麼一個播主,裡面的視訊教程講得挺清晰的,於是跟著視

Android系統載入Apk檔案的時機流程分析1--Android 4.4.4 r1的原始碼

Android系統在啟動時安裝應用程式的過程,這些應用程式安裝好之後,還需要有一個Home應用程式來負責把它們在桌面上展示出來,在Android系統中,這個預設的Home應用程式就是Launcher了。Android系統的Home應用程式Launcher是由Activit

Linux學習ROS安裝1

[email protected]:~$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

目標定位檢測系列1:一些基本概念

最近開始學習深度學習中的定位和檢測任務。本來打算直接看論文,卻發現文章中的的很多基本概念都搞不清楚,於是就自己先梳理了一些定位和檢測任務的基本概念。(內容主要來自斯坦福大學的CS231課程、吳恩達的deeplearning.ai卷積部分,這兩門課程都可以在網易雲

遊戲中的三角學——Sprite Kit Swift 教程1

更新 2015/04/20:升級至 Xcode 6.3 和 Swift 1.2 更新說明:這是我們廣受歡迎的教程之一的第三個版本——第一個版本是 Cocos2D 的,由 Matthijs Hollemans 縮寫,第二個版本由 Tony Dahbura 升

重要的軟體測試度量度量指標1——附帶例子圖表

  在軟體專案中,最重要的就是測量質量,成本, 專案和流程的有效性。如果沒有測量,專案不能算真正的完成。 這篇文章,我們將會結合例子和圖表—學習軟體測試度量和測量指標以及怎樣在軟體測試流程中使用它們。   這裡有一句名言:“我們無法測量我們不能控制的東西”。