如何检查一个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.prefix
和characters.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的单个参数,并返回一个布尔值。
苹果文件