一尘不染

Swift:如何从字符的开始到最后一个索引获取子字符串

swift

我想学习最好/最简单的方法,将一个字符串转换为另一个字符串,但只有一个子集,从一个字符的开头到最后一个索引。

例如,将。什么样的代码片段会做到这一点,并且最快捷?(我希望这不会引起争论,但是我找不到关于如何在Swift中处理子字符串的好课程。


阅读 304

收藏
2020-07-07

共1个答案

一尘不染

只是向后访问

最好的方法是substringToIndex结合使用endIndex属性和advance全局功能。

var string1 = "www.stackoverflow.com"

var index1 = advance(string1.endIndex, -4)

var substring1 = string1.substringToIndex(index1)

寻找从背面开始的字符串

使用rangeOfString并设置options.BackwardsSearch

var string2 = "www.stackoverflow.com"

var index2 = string2.rangeOfString(".", options: .BackwardsSearch)?.startIndex

var substring2 = string2.substringToIndex(index2!)

没有扩展,纯真的Swift

雨燕2.0

advance现在是的一部分,Index称为advancedBy。您这样做:

var string1 = "www.stackoverflow.com"

var index1 = string1.endIndex.advancedBy(-4)

var substring1 = string1.substringToIndex(index1)

斯威夫特3.0

您无法调用advancedBya,String因为它具有可变大小的元素。您必须使用index(_, offsetBy:)

var string1 = "www.stackoverflow.com"

var index1 = string1.index(string1.endIndex, offsetBy: -4)

var substring1 = string1.substring(to: index1)

许多事情已经重命名。这些案件都写在驼峰,startIndex成了lowerBound

var string2 = "www.stackoverflow.com"

var index2 = string2.range(of: ".", options: .backwards)?.lowerBound

var substring2 = string2.substring(to: index2!)

另外,我不建议强制展开index2。您可以使用可选的绑定或map。就个人而言,我更喜欢使用map

var substring3 = index2.map(string2.substring(to:))

斯威夫特4

Swift 3版本仍然有效,但是现在您可以使用带有索引范围的下标:

let string1 = "www.stackoverflow.com"

let index1 = string1.index(string1.endIndex, offsetBy: -4)

let substring1 = string1[..<index1]

第二种方法保持不变:

let string2 = "www.stackoverflow.com"

let index2 = string2.range(of: ".", options: .backwards)?.lowerBound

let substring3 = index2.map(string2.substring(to:))
2020-07-07