删除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中的Stringtypes旨在提供出色的UTF-8支持,因此不能再使用Inttypes访问字符索引/范围/子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是要删除的字符数。