如何在Swift中检查字符串以(前缀)开头还是以(后缀)结尾

苏拉奇:

我正在尝试测试Swift字符串是否以某个值开头或结尾。这些方法不存在:

var str = "Hello, playground"
str.startsWith("Hello") // error
str.endsWith("ground") // error

我还想获取前缀和后缀字符串。我可以找到一个子字符串,正如这里这里所回答的那样,但是范围在Swift中是如此痛苦。

有更简单的方法吗?

(我在阅读文档时偶然发现了答案,并且由于我的搜索词没有找到SO答案,因此我在此处添加了问答。)

苏拉奇:

为Swift 4更新

检查字符串的开头和结尾

您可以使用hasPrefix(_:)hasSuffix(_:)方法测试与另一个String的相等性。

let str = "Hello, playground"

if str.hasPrefix("Hello") { // true
    print("Prefix exists")
}

if str.hasSuffix("ground") { // true
    print("Suffix exists")
}

获取实际的前缀和后缀子字符串

为了获得实际的前缀或后缀子字符串,可以使用以下方法之一。我推荐第一种方法很简单。所有方法都str用作

let str = "Hello, playground"

方法1 :(推荐)prefix(Int)suffix(Int)

let prefix = String(str.prefix(5)) // Hello
let suffix = String(str.suffix(6)) // ground

我认为这是更好的方法。与下面的方法2和3不同,如果索引超出范围,则此方法不会崩溃。它只会返回字符串中的所有字符。

let prefix = String(str.prefix(225)) // Hello, playground
let suffix = String(str.suffix(623)) // Hello, playground

当然,有时候崩溃是件好事,因为它们会让您知道您的代码有问题。因此,还要考虑下面的第二种方法。如果索引超出范围,将引发错误。

方法2:prefix(upto:)suffix(from:)

Swift字符串索引非常棘手,因为它们必须考虑特殊字符(如表情符号)。但是,一旦获得索引,就很容易获得前缀或后缀。(见我的其他的答案String.Index。)

let prefixIndex = str.index(str.startIndex, offsetBy: 5)
let prefix = String(str.prefix(upTo: prefixIndex)) // Hello

let suffixIndex = str.index(str.endIndex, offsetBy: -6)
let suffix = String(str.suffix(from: suffixIndex)) // ground

如果您想防止越界,可以使用limitedBy(再次参见此答案进行索引

方法3:下标

由于String是一个集合,因此可以使用下标获取前缀和后缀。

let prefixIndex = str.index(str.startIndex, offsetBy: 5)
let prefix = String(str[..<prefixIndex]) // Hello

let suffixIndex = str.index(str.endIndex, offsetBy: -6)
let suffix = String(str[suffixIndex...]) // ground

进一步阅读

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章