如何检查一个string在Swift中以(前缀)开始还是以(后缀)结尾

我试图testing如果一个Swiftstring开始或以一定的值结束。 这些方法不存在:

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

我也想获得前缀和后缀string。 我可以find一个子string,就像在这里和这里回答的那样,但是在Swift中,范围是如此的痛苦。

有没有更简单的方法来做到这一点?

(当我阅读文档时 ,我偶然发现了答案,因为我的答案没有出现在我的search条件中,所以我在这里添加了我的问答。)

检查一个string以什么开始和结束

您可以使用hasPrefix(_:)hasSuffix(_:)方法来testing与另一个string的相等性。

 var str = "Hello, playground" if str.hasPrefix("Hello") { // true print("Prefix exists") } if str.hasSuffix("ground") { // true print("Suffix exists") } 

获取实际前缀和后缀子string

为了得到实际的前缀或后缀子string,可以使用下列方法之一。 我推荐第一种方法,因为它很简单。 所有的方法都使用str

 var str = "Hello, playground" 

方法1:(推荐) characters.prefixcharacters.suffix

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

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

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

当然,有时崩溃是很好的,因为它们让你知道你的代码有问题。 所以考虑下面的第二种方法。 如果索引超出范围,它会抛出一个错误。

方法2: substring(to:)substring(from:)

Swiftstring索引是棘手的,因为他们必须考虑到特殊字符(如表情符号)。 但是,一旦你获得索引,很容易获得前缀或后缀。 (请参阅我在String.Index上的其他答案 。

 let prefixIndex = str.index(str.startIndex, offsetBy: 5) let prefix = str.substring(to: prefixIndex) // Hello let suffixIndex = str.index(str.endIndex, offsetBy: -6) let suffix = str.substring(from: suffixIndex) // ground 

如果你想防止出界,你可以使用limitedBy (再次看到这个答案 )索引。

进一步阅读

  • string和字符文档

前缀和后缀平等

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

苹果文件