swift 字符串 String NSString

一. StringNSString 的根本區別

  • String 是結構體,結構體是「值類型」,因此 String 也是值類型。
  • 值類型被賦予給一個變量、常量或者被傳遞給一個函數的時候,其值會被拷貝。這意味着它們的實例,以及實例中所包含的任何值類型屬性,在代碼中傳遞的時候都會被複制。
  • NSString 是類,類是「引用類型」,因此NSString 也是引用類型。
  • 引用類型在被賦予到一個變量、常量或者被傳遞到一個函數時,其值不會被拷貝。所以,引用的是已存在的實例自己而不是其拷貝。

二. StringNSString 獨有的API

2.1 String 獨有的API

2.1.1 初始化 String

var str = String()
        str = "123456"
複製代碼

2.1.2 StringisEmpty 屬性

  • 判斷字符串是否爲空
var str = String();
        str = "123456";
        print(str.isEmpty);
        // false
複製代碼
var str = String();
        print(str.isEmpty);
        // true
複製代碼
var str = "";
        print(str.isEmpty);
        // true
複製代碼

2.1.3 Stringsorted() 方法:

  • 字符串排序並輸出字符的數組
var str = "215423";
        print(str.sorted());
        //["1", "2", "2", "3", "4", "5"]
複製代碼

2.1.4 Stringfilter() 方法

  • 過濾不要的字符
let str = "12 34 56";
        let filter = str.filter { (char) -> Bool in
            char != " "
        };
        print(filter);
        //123456
複製代碼

2.1.5 Stringenumerated() 方法:

let str = "123456";
        for data in str.enumerated() {
            print(data);
        }
        
        /*
        (offset: 0, element: "1")
        (offset: 1, element: "2")
        (offset: 2, element: "3")
        (offset: 3, element: "4")
        (offset: 4, element: "5")
        (offset: 5, element: "6")
        */
複製代碼

2.2 NSString 獨有的API

2.2.1 初始化一個NSString

var nsStr = NSString();
        nsStr = "123456";
        print(nsStr);
複製代碼
var nsStr = NSString(stringLiteral: "123456");
複製代碼
var nsStr = NSString.init(string: "123456");
複製代碼

2.2.1 NSStringboolValue 屬性

  • 首字符爲 Y、y、T、t、非0數字 返回true,不然返回false
var nsStr = NSString(stringLiteral: "123456");
        print(nsStr.boolValue);
        //true
複製代碼

2.2.2 NSStringisEqual() 方法

  • 判斷兩個字符串是否相等
var nsStr = NSString(stringLiteral: "123456");
        print(nsStr.isEqual(to: "123456"));
        //true
複製代碼

2.2.3 NSString 的數值屬性

var nsStr = NSString(stringLiteral: "123456")
        print(nsStr.intValue);
        print(nsStr.floatValue);
        print(nsStr.doubleValue);
複製代碼

2.3 StringNSString 寫法不一樣、功能相同的API

2.3.1 獲取字符串的字符數量

print(str.count);   //6
        print( nsStr.length);   //6
複製代碼

2.3.2 字符串的截取

  • String截取完成返回Substring
var str = "123456";
        print(str.prefix(str.count - 2));   //"1234"
        print(str.suffix(3));   //"456"
        print(str.dropLast(4)); //"12"
        print(str.dropFirst(2));    //"3456"
複製代碼
  • NSString截取完成返回String
var nsStr = NSString(stringLiteral: "123456");
        print(nsStr.substring(to: nsStr.length - 3))    //"123"
        print(nsStr.substring(from: 3)) //"456"
        print(nsStr.substring(with: NSMakeRange(1, 4))) //"2345"
複製代碼

2.3.3 添加字符到字符串結尾

  • String是添加字符到自身
var str = "123456";
        str.append("abc");
        print(str);
        //123456abc
複製代碼
  • NSString是返回一個新的String,自身不變
var nsStr = NSString(stringLiteral: "123456");
        let nsStr1 = nsStr.appending("abc");
        print(nsStr);   //123456
        print(nsStr1);  //123456abc
複製代碼

2.4 StringNSString 相同的API

2.4.1 是否含有特定的前綴/後綴

var str = "123456";
        str.hasPrefix("12") //true
        str.hasSuffix("56") //true
        
        var nsStr = NSString(stringLiteral: "123456");
        nsStr.hasPrefix("12")   //true
        nsStr.hasSuffix("56")   //true
複製代碼

2.4.2 使用特定字符拆分字符串

var str = "123456-11";
        str.components(separatedBy: "-");   //["123456", "11"]

        var nsStr = NSString(stringLiteral: "123456-22");
        nsStr.components(separatedBy: "-"); //["123456", "22"]
複製代碼

2.4.3 字母大小寫轉換

var str = "abc";
        print(str.uppercased());    //ABC
        print(str.lowercased());    //abc
        
        var nsStr = NSString(stringLiteral: "cba");
        print(nsStr.uppercased);    //CBA
        print(nsStr.lowercased);    //cba
複製代碼

2.4.4 首字母大寫

var str = "abc";
        print(str.capitalized);    //Abc
        
        var nsStr = NSString(stringLiteral: "cba");
        print(nsStr.capitalized);    //Cba
複製代碼

2.4.5 去除特定字符串

  • 空格 .whitespaces
  • 換行符 .newlines
  • 數字 .decimalDigits
  • 字母 .letters
  • 大寫字母 .uppercaseLetters
let str = "\r abc ";
        let strTrimed = str.trimmingCharacters(in: .whitespacesAndNewlines)
        print(strTrimed);   //abc
        
        let nsStr = NSString(stringLiteral: "\r cba ");
        let nsStrTrimed = nsStr.trimmingCharacters(in: .whitespacesAndNewlines);
        print(nsStrTrimed); //cba
複製代碼

2.4.6 字符替換

  • 若是想替換的字符找不到,則返回原來字符串
let str = "hello String";
        let str1 = str.replacingOccurrences(of: "String", with: "world")
        print(str1) //"hello world"
        
        let nsStr = NSString(stringLiteral:"hello NSString");
        let nsStr1 = nsStr.replacingOccurrences(of: "NSString", with: "world")
        print(nsStr1)   //"hello world"
複製代碼

2.4.7 十 \ 十六 \ 八進制數轉字符串

  • 結果返回String
let hexStr = String().appendingFormat("%x",16)//十進制轉十六進制,結果爲"10"
        let oStr = String().appendingFormat("%o",16)//十進制轉八進制,結果爲"20"
        let dStr = String().appendingFormat("%d",0x10)//十六進制轉十進制,結果爲"16"
        let dStr1 = String(format: "%d", 0o10)//八進制轉十進制,結果爲"8"
複製代碼
  • 結果返回NSString
let hexNSStr = NSString().appendingFormat("%x", 16)//十進制轉十六進制,結果爲"10"
        let oNSStr = NSString().appendingFormat("%o",16)//十進制轉八進制,結果爲"20"
        let dNSStr = NSString().appendingFormat("%d",0x10)//十六進制轉十進制,結果爲"16"
        let dNSStr1 = NSString(format: "%d", 0o10)//八進制轉十進制,結果爲"8"
複製代碼
相關文章
相關標籤/搜索