玩转String

有时候操作String在Swift中可能有点麻烦,这里有些技巧,可能会对您的开发有所帮助。

Split

将字符串拆分为数组。

let text = "ab.c1,23"
print(text.components(separatedBy: [".", ","]))

// ["ab", "c1", "23"]

将数组转化为字符串。

print(["ab", "c1", "23"].reduce("", { $0 + $1}))
// abc123

Sort string

首先,我们将拆分字符串,然后排序,然后再连接在一起。 在这个例子中,我将数组映射到数组,所以它可以更容易排序。 这可能是没有必要的,但我还没有找到一个更好的方法,如果您知道,希望你能告诉我。

let text = "ab.c1,23"
print(text.characters.sorted { $0 < $1 }.flatMap({ String($0) }).joined())
// ,.123abc

Trim whitespace

从字符串中删除所有前导和尾随空格。

extension String {
    func trimmed(set: CharacterSet = .whitespaces) -> String {
         return trimmingCharacters(in: set)
     }
}
let text = "  ab23  "
print(text.trimmed())
// "ab23"

其中还有很多其他字符集包括:
alphanumericCharacterSet
whitespaceCharacterSet
symbolCharacterSet
punctuationCharacterSet
此外,您可以通过添加.inverted到最后来获得任何字符集的反集。

删除String中的所有空格

let text = "  a  b      2  3  "
print(text.replacingOccurrences(of: " ", with: ""))
// "ab23"

Substring

访问字符串中的字符显得有点冗长。 它有助于将Swift中的String视为不是字符数组,而是作为Unicode标量,可以使用String.unicodeScalars访问。 String.Index跟踪字符索引。
当然,可以扩展String以允许使用Integer下标。 请记住,在某些情况下,这可能会添加歧义。 Swift希望我们是明确的获取字符串中的子串:

extension String {
     func substring(to string: String) -> String {
        return substring(to: (range(of: string)?.lowerBound) ?? endIndex)
     }

     subscript (i: Int) -> String {
          return String(self[self.index(self.startIndex, offsetBy: i)])
     }

     subscript (r: Range) -> String {
        let start = self.index(self.startIndex, offsetBy: r.lowerBound)
        let end = self.index(self.startIndex, offsetBy: r.upperBound)
        return self[start...end]
     }
}
var text = "1234"
print(text.substring(to: "<")) // "1234"
print(text[2])  // 3

suffix/prefix

let line = "0001 Some test data here %%%%"
line.hasPrefix("0001") // true
line.hasSuffix("%%%%") // true

转换为大小写

顾名思义:

let mixedCase = "AbcDef"
let upper = mixedCase.uppercased() 
// "ABCDEF"
let lower = mixedCase.lowercased() 
// "abcdef"

Counting

String不直接具有返回计数的属性,因为它只对特定表示有意义。 所以count在每个集合上实现:

var emptyString = "" 
emptyString.isEmpty // true
let spain = España
print("\(spain.characters.count)") // 6
print("\(spain.unicodeScalars.count)") // 6
print("\(spain.utf16.count)") // 6
print("\(spain.utf8.count)") // 7

比较排序:

if "aaa" < "bbb" {
 print("aaa is less than bbb") //  "aaa is less than bbb"
}

你可能感兴趣的:(玩转String)