从字符串中删除最后两个字符

76

在Swift中是否有一种快速删除字符串中最后两个字符的方法?我看到有一种简单的方法可以清楚地删除最后一个字符,如此处所示。您知道如何删除最后两个字符吗?谢谢!


https://dev59.com/I1wY5IYBdhLWcg3wPVtS - LF00
5个回答

165

更新: Xcode 9 • Swift 4 或更高版本

现在String符合RangeReplaceableCollection,因此您可以在String中直接使用集合方法dropLast,因此不再需要扩展。唯一的区别是它返回一个Substring。如果您需要一个String,则需要从其中初始化一个新的String:

let string = "0123456789"
let substring1 = string.dropLast(2)         // "01234567"
let substring2 = substring1.dropLast()      // "0123456"
let result = String(substring2.dropLast())  // "012345"

我们也可以扩展LosslessStringConvertible,添加尾随语法,我认为这可以提高可读性:

extension LosslessStringConvertible {
    var string: String { .init(self) }
}

使用方法:

let result = substring.dropLast().string

8
我非常喜欢Swift。 - Malfunction
请注意,String.dropLast() 返回一个 Substring,因此根据您的使用方式,您可能需要将其转换为字符串。 - Uncommon
@Uncommon 如果您阅读整个答案,您会发现它已经在帖子中说明了。 - Leo Dabus

60
var name: String = "Dolphin"
let endIndex = name.index(name.endIndex, offsetBy: -2)
let truncated = name.substring(to: endIndex)
print(name)      // "Dolphin"
print(truncated) // "Dolph"

4
你刚刚只是从原帖链接中复制粘贴了内容。 - Rajan Maheshwari
3
原链接删除的是最后一个字符,而不是最后两个。 - Naveen Ramanathan
5
与@LeoDabus的答案中展示的dropLast(..)方法相比,此答案中的方法对于长度小于两个字符(仅为空或只有一个字符)的字符串将产生运行时异常。此外,dropLast方法是Swift本地的,而.substring是通过Foundation从NSString转换而来的(不完全是Swift本地的)。 - dfrib
难道不应该问如何选择前N个字符吗?否则,你需要测试你是否有足够的字符来保持非nil状态。 - aremvee

26

Swift 4:

let str = "Hello, playground"
let newSTR1 = str.dropLast(3)
print(newSTR1) 

output: "Hello, playgro"

//---------------//

let str = "Hello, playground"
let newSTR2 = str.dropFirst(2)
print(newSTR2)

output: "llo, playground"

2
最好使用removeLast()。该内容涉及编程,保留了HTML格式,不做解释。
var myString = "Hello world"
myString.removeLast(2)

output : "Hello wor"

2
如果字符串长度小于2,则此操作将失败。根据文档:“尝试删除比集合中存在的元素更多的元素会触发运行时错误。” - koen

1

使用 removeSubrange(Range<String.Index>) 就像这样:

var str = "Hello, playground"
str.removeSubrange(Range(uncheckedBounds: (lower: str.index(str.endIndex, offsetBy: -2), upper: str.endIndex)))

如果字符串长度小于2个字符,这将会崩溃。这对你来说是必要条件吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接