Swift4 字符串截取

现有字符串Hello, World!

let helloWorld = "Hello, World!"

想截取前5个字符为子串,有两种方法,一是使用字符串的集合特性:

let subStringTo5 = String(helloWorld.prefix(5))

二是使用字符串索引:

let subStringTo5 = String(helloWorld[..

打印结果:
subStringTo5: Hello

要对String操作,大多需要通过String.Index为中间媒介来达到。
对于截取字符串,Swift4用的是[startIndex...endIndex]这样的语法,在String后跟一个区间。通俗讲,此区间的值要求用String.Index类型,下面我们来弄出一些Index值。

起始Index:

let startIndex = helloWorld.startIndex

在起始Index基础上偏移5:

let offset5Index = helloWorld.index(startIndex, offsetBy: 5)

在中括号里写两个值,可以得到一个子串,结果是SubString类型。
这种写法...是闭区间,得到结果包括左右两个Index对应的字符;
这种写法..<是开区间,得到结果包括了左Index对应的字符,但不包括右Index对应的字符:

let subString = helloWorld[startIndex..

如果左Index不写,则默认为startIndex:

let subString = helloWorld[..

以上得到的结果,类型还不是String,只是SubString类型而已,还需要我们多做一步工作,构造String :

let subStringTo5 = String(helloWorld[..

打印结果:
subStringTo5: Hello

如果在中括号里只写一个Index值会怎么样?得到的结果是所写Index对应的字符,Character类型:

let offset5Character = helloWorld[offset5Index]
print("offset5Character: \(offset5Character)")

打印结果,是个逗号:
offset5Character: ,

如果觉得Swift4这样设计,不习惯,那么还是可以通过extension的方式,自己实现一个喜欢的subString方法。

extension String {
    func mySubString(to index: Int) -> String {
        return String(self[.. String {
        return String(self[self.index(self.startIndex, offsetBy: index)...])
    }
}

使用:

print("subStringTo8: \(helloWorld.mySubString(to: 8))")
print("subStringFrom5: \(helloWorld.mySubString(from: 5))")

打印结果:
subStringTo8: Hello, W
subStringFrom5: , World!

你可能感兴趣的:(Swift4 字符串截取)