如何检查String在Swift中以(前缀)开头或以(后缀)结尾的内容

Sur*_*gch 94 string ios swift

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

var str = "Hello, playground"
str.startsWith("Hello") // error
str.endsWith("ground") // error
Run Code Online (Sandbox Code Playgroud)

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

有更简单的方法吗?

(当我阅读文档时,我偶然发现了答案,因为我的搜索条款没有得到答案,所以我在这里添加了问答.)

Sur*_*gch 182

针对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")
}
Run Code Online (Sandbox Code Playgroud)

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

要获取实际前缀或后缀子字符串,可以使用以下方法之一.我推荐第一种方法,因为它简单.所有方法都str用作

let str = "Hello, playground"
Run Code Online (Sandbox Code Playgroud)

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

let prefix = String(str.prefix(5)) // Hello
let suffix = String(str.suffix(6)) // ground
Run Code Online (Sandbox Code Playgroud)

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

let prefix = String(str.prefix(225)) // Hello, playground
let suffix = String(str.suffix(623)) // Hello, playground
Run Code Online (Sandbox Code Playgroud)

当然,有时崩溃很好,因为它们会让您知道您的代码存在问题.因此,请考虑下面的第二种方法.如果索引超出范围,它将抛出错误.

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

Swift String索引很棘手,因为它们必须考虑特殊字符(如表情符号).但是,一旦获得索引,就很容易获得前缀或后缀.(见我的其他的答案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
Run Code Online (Sandbox Code Playgroud)

如果你想防止越界,你可以使用索引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
Run Code Online (Sandbox Code Playgroud)

进一步阅读


Gob*_*i M 5

前缀和后缀相等

要检查字符串是否具有特定的字符串前缀或后缀,请调用字符串的 hasPrefix( :) 和 hasSuffix( :) 方法,这两个方法都采用 String 类型的单个参数并返回一个布尔值。

苹果文档