玩转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

首先,我们将拆分字符串,然后排序,然后再连接在一起。 在这个例子中,我将数组<Character>映射到数组<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<Int>) -> 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<user>"
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"
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,584评论 4 61
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,746评论 0 4
  • 何为爱,它就是毒品,服下时令人疯狂销魂的爽悦,离开时令人撕心裂肺的剧痛。 戒毒时的人是什么状态,我没见过,应该也会...
    玉雕阅读 1,306评论 0 0
  • 相信很多人都使用过export、export default、import,然而它们到底有什么区别呢? 在ES6中...
    sponing阅读 2,515评论 1 2
  • 在我所负责的工作里,很少有被称作“项目”的事情,基本都是一些琐碎的小事,以前我总觉得将一件小事做好就好了,可是近来...
    少年长志阅读 3,526评论 0 0

友情链接更多精彩内容