如何在swift 4中获取子字符串?

时间:2018-01-20 07:24:10

标签: swift string swift4

我知道我们可以使用下标来剪切Swift 4中的一部分字符串。

let s = "aString"
let subS = s[..<s.endIndex]

但问题是,如何将s剪切为类似aStr的子字符串。
我的意思是,我想做的事情就像s[..<(s.endIndex-3)] 但这不对。
那么,如何在Swift 4中做到这一点。

3 个答案:

答案 0 :(得分:15)

String.Index不是整数,您不能简单地减去 s.endIndex - 3,&#34;集合移动其索引&#34;,请参阅  关于斯威夫特进化的A New Model for Collections and Indices

必须注意不要将索引移动到有效范围之外。 例如:

let s = "aString"

if let upperBound = s.index(s.endIndex, offsetBy: -3, limitedBy: s.startIndex) {
    let subS = String(s[..<upperBound])
} else {
    print("too short")
}

或者,

let upperBound = s.index(s.endIndex, offsetBy: -3, limitedBy: s.startIndex) ?? s.startIndex
let subS = String(s[..<upperBound])

如果s少于3个字符,则会打印一个空字符串。

如果你想要一个字符串的初始部分,那么你可以简单地做

let subS = String(s.dropLast(3))

或作为一种变异方法:

var s = "aString"
s.removeLast(min(s.count, 3))
print(s) // "aStr"

答案 1 :(得分:2)

正如您所说,错误是Binary operator '-' cannot be applied to operands of type 'String.Index' and 'Int'

您必须先找到Swift.Index

let s = "aString"
let index = s.index(s.endIndex, offsetBy: -3)
let subS = s[..<index]
print(String(subS))

答案 2 :(得分:0)

从一开始,我想要的只是一个简单的Substring,由x个字符组成。这是一个功能。

func SimpleSubstring(string : String, length : Int) -> String {
    var returnString = string

    if (string.count > length) {
        returnString = String(string[...string.index(string.startIndex, offsetBy: length - 1)])
    }

    return returnString
}

用法

let myTruncatedString : String = SimpleSubstring(string: myBigString, length: 10)