删除string的最后一个字符 Swift语言
如何使用Swift从Stringvariables中删除最后一个字符? 在文档中找不到它。
这里是完整的例子:
var expression = "45+22" expression = expression.substringToIndex(countElements(expression) - 1)
新的Swift 3.0方法
这些API已经变得更加灵活了 ,结果基金会的扩展已经改变了一点:
var name: String = "Dolphin" var truncated = name.substring(to: name.index(before: name.endIndex)) print(name) // "Dolphin" print(truncated) // "Dolphi"
或者就地版本:
var name: String = "Dolphin" name.remove(at: name.index(before: name.endIndex)) print(name) // "Dolphi"
感谢Zmey,Rob Allen!
Swift 2.0+方式
有几种方法可以实现这一点:
尽pipe不是Swift图书馆的一部分,但通过基金会的扩展,
var name: String = "Dolphin" var truncated = name.substringToIndex(name.endIndex.predecessor()) print(name) // "Dolphin" print(truncated) // "Dolphi"
使用removeRange()
方法( 更改 name
):
var name: String = "Dolphin" name.removeAtIndex(name.endIndex.predecessor()) print(name) // "Dolphi"
使用dropLast()
函数:
var name: String = "Dolphin" var truncated = String(name.characters.dropLast()) print(name) // "Dolphin" print(truncated) // "Dolphi"
Old String.Index(Xcode 6 Beta 4 +)的方式
由于Swift中的String
types旨在提供出色的UTF-8支持,因此不能再使用Int
types访问字符索引/范围/子string。 相反,你使用String.Index
:
let name: String = "Dolphin" let stringLength = count(name) // Since swift1.2 `countElements` became `count` let substringIndex = stringLength - 1 name.substringToIndex(advance(name.startIndex, substringIndex)) // "Dolphi"
或者(对于一个更实用,但较less教育的例子),你可以使用endIndex
:
let name: String = "Dolphin" name.substringToIndex(name.endIndex.predecessor()) // "Dolphi"
注意:我发现这是了解String.Index
一个很好的起点
旧的(前Beta 4)方式
您可以简单地使用substringToIndex()
函数,提供一个比String
的长度小的String
:
let name: String = "Dolphin" name.substringToIndex(countElements(name) - 1) // "Dolphi"
全局dropLast()
函数在序列上工作,因此在string上工作:
var expression = "45+22" expression = dropLast(expression) // "45+2" // in Swift 2.0 (according to cromanelli's comment below) expression = String(expression.characters.dropLast())
Swift 4:
let choppedString = String(theString.dropLast())
在Swift 2中,这样做:
let choppedString = String(theString.characters.dropLast())
我推荐这个链接来理解Swiftstring。
这是一个string扩展表单:
extension String { func removeCharsFromEnd(count_:Int) -> String { let stringLength = count(self) let substringIndex = (stringLength < count_) ? 0 : stringLength - count_ return self.substringToIndex(advance(self.startIndex, substringIndex)) } }
对于早于1.2版本的Swift版本:
... let stringLength = countElements(self) ...
用法:
var str_1 = "Maxim" println("output: \(str_1.removeCharsFromEnd(1))") // "Maxi" println("output: \(str_1.removeCharsFromEnd(3))") // "Ma" println("output: \(str_1.removeCharsFromEnd(8))") // ""
参考:
扩展为现有的类,结构或枚举types添加新的function。 这包括扩展您无法访问原始源代码的types(称为追溯build模)。 扩展与Objective-C中的类别相似。 (与Objective-C类别不同,Swift扩展没有名称。)
请参阅DOCS
使用函数removeAtIndex(i: String.Index) -> Character
:
var s = "abc" s.removeAtIndex(s.endIndex.predecessor()) // "ab"
修剪string最后一个字符的最简单方法是:
title = title[title.startIndex ..< title.endIndex.advancedBy(-1)]
let str = "abc" let substr = str.substringToIndex(str.endIndex.predecessor()) // "ab"
var str = "Hello, playground" extension String { var stringByDeletingLastCharacter: String { return dropLast(self) } } println(str.stringByDeletingLastCharacter) // "Hello, playgroun"
简短回答(2015-04-16有效): removeAtIndex(myString.endIndex.predecessor())
例:
var howToBeHappy = "Practice compassion, attention and gratitude. And smile!!" howToBeHappy.removeAtIndex(howToBeHappy.endIndex.predecessor()) println(howToBeHappy) // "Practice compassion, attention and gratitude. And smile!"
元:
语言继续其快速的演变,使许多以前良好的SO答案危险短暂的半衰期。 学习语言并参考真实文档总是最好的。
使用函数advance(startIndex, endIndex)
:
var str = "45+22" str = str.substringToIndex(advance(str.startIndex, countElements(str) - 1))
一个迅速变化的类别:
extension String { mutating func removeCharsFromEnd(removeCount:Int) { let stringLength = count(self) let substringIndex = max(0, stringLength - removeCount) self = self.substringToIndex(advance(self.startIndex, substringIndex)) } }
使用:
var myString = "abcd" myString.removeCharsFromEnd(2) println(myString) // "ab"
Swift 3(根据文档 )2016年11月20日
let range = expression.index(expression.endIndex, offsetBy: -numberOfCharactersToRemove)..<expression.endIndex expression.removeSubrange(range)
使用新的子stringtypes用法:
Swift 4:
var before: String = "Hello world!" var lastCharIndex: Int = before.endIndex var after:String = String(before[..<lastCharIndex]) print(after) // Hello world
较短的方法:
var before: String = "Hello world!" after = String(before[..<before.endIndex]) print(after) // Hello world
斯威夫特4
var welcome = "Hello World!" welcome = String(welcome[..<welcome.index(before:welcome.endIndex)])
要么
welcome.remove(at: welcome.index(before: welcome.endIndex))
要么
welcome = String(welcome.dropLast())
我build议使用NSString的string,你想操纵。 实际上,把它想象成一个开发人员,我从来没有遇到与Swiftstring将解决的NSString的问题…我明白的微妙之处。 但我还没有真正需要他们。
var foo = someSwiftString as NSString
要么
var foo = "Foo" as NSString
要么
var foo: NSString = "blah"
然后,简单的NSStringstring操作的整个世界向您敞开。
作为对这个问题的回答
// check bounds before you do this, eg foo.length > 0 // Note shortFoo is of type NSString var shortFoo = foo.substringToIndex(foo.length-1)
免费的上面的代码我想删除string的开始,并找不到任何地方的参考。 我是这样做的:
var mac = peripheral.identifier.description let range = mac.startIndex..<mac.endIndex.advancedBy(-50) mac.removeRange(range) // trim 17 characters from the beginning let txPower = peripheral.advertisements.txPower?.description
这从string开始修剪17个字符(他总的string长度是67我们提前-50从最后,你有它。
另一种方法如果你想从最后删除一个或多个字符。
var myStr = "Hello World!" myStr = (myStr as NSString).substringToIndex((myStr as NSString).length-XX)
其中XX是要删除的字符数。