ฉันจะลบอักขระตัวสุดท้ายออกจากตัวแปร String โดยใช้ Swift ได้อย่างไร ไม่พบในเอกสาร
นี่คือตัวอย่างเต็มรูปแบบ:
var expression = "45+22"
expression = expression.substringToIndex(countElements(expression) - 1)
ฉันจะลบอักขระตัวสุดท้ายออกจากตัวแปร String โดยใช้ Swift ได้อย่างไร ไม่พบในเอกสาร
นี่คือตัวอย่างเต็มรูปแบบ:
var expression = "45+22"
expression = expression.substringToIndex(countElements(expression) - 1)
คำตอบ:
Swift 4.0 (รวมถึง Swift 5.0)
var str = "Hello, World" // "Hello, World"
str.dropLast() // "Hello, Worl" (non-modifying)
str // "Hello, World"
String(str.dropLast()) // "Hello, Worl"
str.remove(at: str.index(before: str.endIndex)) // "d"
str // "Hello, Worl" (modifying)
สวิฟท์ 3.0
API ได้รับswiftyอีกเล็กน้อยและเป็นผลให้ส่วนขยายของมูลนิธิเปลี่ยนไปเล็กน้อย:
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+ Way
มีสองสามวิธีที่จะทำให้สิ่งนี้สำเร็จ:
ผ่านส่วนขยายของมูลนิธิแม้ว่าจะไม่ได้เป็นส่วนหนึ่งของห้องสมุด Swift:
var name: String = "Dolphin"
var truncated = name.substringToIndex(name.endIndex.predecessor())
print(name) // "Dolphin"
print(truncated) // "Dolphi"
โดยใช้removeRange()
วิธีการ (ซึ่งaltersname
):
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"
String เก่า .Index (Xcode 6 Beta 4 +)
เนื่องจากString
ประเภทใน Swift มีจุดมุ่งหมายเพื่อให้การสนับสนุน UTF-8 ที่ยอดเยี่ยมคุณจะไม่สามารถเข้าถึงดัชนี / ช่วง / สตริงย่อยของตัวละครโดยใช้Int
ประเภท คุณใช้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"
อีกทางหนึ่ง (สำหรับตัวอย่างที่ใช้งานได้จริง แต่มีการศึกษาน้อยกว่า) คุณสามารถใช้endIndex
:
let name: String = "Dolphin"
name.substringToIndex(name.endIndex.predecessor()) // "Dolphi"
หมายเหตุ:ฉันพบว่านี่เป็นจุดเริ่มต้นที่ดีสำหรับการทำความเข้าใจString.Index
วิธีเก่า (pre-Beta 4)
คุณสามารถใช้substringToIndex()
ฟังก์ชั่นได้โดยให้มันมีความยาวน้อยกว่าString
:
let name: String = "Dolphin"
name.substringToIndex(countElements(name) - 1) // "Dolphi"
substringToIndex
substringToIndex
substringFromIndex
มันไม่ได้ทำให้คุณรู้สึกผิดพลาดอย่างชาญฉลาดให้ฉันบอกคุณ
substringToIndex
ไม่ได้เป็นสมาชิกชื่อ นอกจากนี้ในฐานะของ Xcode 7 สตริงไม่มี.count
คุณสมบัติอีกต่อไปตอนนี้มันจะถูกนำไปใช้กับตัวละครเท่านั้น:string.characters.count
var truncated = name.substring(to: name.index(before: name.endIndex))
dropLast()
ฟังก์ชั่นระดับโลกทำงานบนลำดับและดังนั้นจึงอยู่ในสตริง:
var expression = "45+22"
expression = dropLast(expression) // "45+2"
// in Swift 2.0 (according to cromanelli's comment below)
expression = String(expression.characters.dropLast())
characters
คุณสมบัติบน String จะส่งลำดับดังนั้นตอนนี้คุณต้องใช้: expression = expression.characters.dropLast()
expression = String(expression.characters.dropLast())
หากคุณต้องการให้มันกลับมาเป็น String
สวิฟท์ 4:
let choppedString = String(theString.dropLast())
ใน Swift 2 ให้ทำสิ่งนี้:
let choppedString = String(theString.characters.dropLast())
ฉันแนะนำลิงก์นี้เพื่อทำความเข้าใจกับสตริงของ Swift
var str = "bla"
str.removeLast() // returns "a"; str is now "bl"
นี่คือฟอร์มส่วนขยายของสตริง:
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))
}
}
สำหรับ Swift เวอร์ชันก่อนหน้า 1.2:
...
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))") // ""
อ้างอิง:
ส่วนขยายเพิ่มฟังก์ชันการทำงานใหม่ให้กับคลาสโครงสร้างหรือประเภทการแจงนับที่มีอยู่ ซึ่งรวมถึงความสามารถในการขยายประเภทที่คุณไม่สามารถเข้าถึงซอร์สโค้ดต้นฉบับ (รู้จักกันในนามแบบจำลองย้อนหลัง) ส่วนขยายคล้ายกับหมวดหมู่ใน Objective-C (ต่างจากหมวด Objective-C ส่วนขยาย Swift ไม่มีชื่อ)
ดูDOCS
ใช้ฟังก์ชั่นremoveAtIndex(i: String.Index) -> Character
:
var s = "abc"
s.removeAtIndex(s.endIndex.predecessor()) // "ab"
วิธีที่ง่ายที่สุดในการตัดอักขระตัวสุดท้ายของสตริงคือ:
title = title[title.startIndex ..< title.endIndex.advancedBy(-1)]
สวิฟต์ 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())
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"
หมวดหมู่ที่รวดเร็วที่กลายพันธุ์:
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"
คำตอบสั้น ๆ (ใช้ได้ตั้งแต่ 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!"
Meta:
ภาษายังคงวิวัฒนาการอย่างรวดเร็วทำให้ครึ่งชีวิตของ SO ที่ดีขึ้น แต่ก่อนหลายคำตอบสั้น ๆ อันตราย มันเสมอดีที่สุดในการเรียนรู้ภาษาและการอ้างอิงถึงจริงเอกสาร
ด้วยการใช้ชนิดสตริงย่อยใหม่:
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
ใช้ฟังก์ชั่นadvance(startIndex, endIndex)
:
var str = "45+22"
str = str.substringToIndex(advance(str.startIndex, countElements(str) - 1))
อีกวิธีหนึ่งถ้าคุณต้องการที่จะลบหนึ่งหรือมากกว่าหนึ่งตัวละครมากกว่าหนึ่งจากปลาย
var myStr = "Hello World!"
myStr = (myStr as NSString).substringToIndex((myStr as NSString).length-XX)
โดยที่XXคือจำนวนอักขระที่คุณต้องการลบ
Swift 3 (ตามเอกสาร ) 20 พฤศจิกายน 2559
let range = expression.index(expression.endIndex, offsetBy: -numberOfCharactersToRemove)..<expression.endIndex
expression.removeSubrange(range)
ฉันขอแนะนำให้ใช้ NSString สำหรับสตริงที่คุณต้องการจัดการ จริง ๆ แล้วคิดว่ามันเป็นนักพัฒนาฉันไม่เคยเจอปัญหากับ NSString ที่ Swift String จะแก้ปัญหา ... ฉันเข้าใจรายละเอียดปลีกย่อย แต่ฉันยังไม่ได้มีความต้องการที่แท้จริงสำหรับพวกเขา
var foo = someSwiftString as NSString
หรือ
var foo = "Foo" as NSString
หรือ
var foo: NSString = "blah"
และจากนั้นโลกทั้งโลกของการดำเนินงานสตริง NSString ง่าย ๆ จะเปิดให้คุณ
เป็นคำตอบสำหรับคำถาม
// check bounds before you do this, e.g. foo.length > 0
// Note shortFoo is of type NSString
var shortFoo = foo.substringToIndex(foo.length-1)
dropLast()
ฟังก์ชั่นเอาองค์ประกอบสุดท้ายของสตริง
var expression = "45+22"
expression = expression.dropLast()
Swift 3 : เมื่อคุณต้องการลบสตริงต่อท้าย:
func replaceSuffix(_ suffix: String, replacement: String) -> String {
if hasSuffix(suffix) {
let sufsize = suffix.count < count ? -suffix.count : 0
let toIndex = index(endIndex, offsetBy: sufsize)
return substring(to: toIndex) + replacement
}
else
{
return self
}
}
สวิฟท์ 4.2
ฉันยังลบตัวละครตัวสุดท้ายของฉันออกจาก String (เช่นข้อความ UILabel ) ในแอป IOS
@IBOutlet weak var labelText: UILabel! // Do Connection with UILabel
@IBAction func whenXButtonPress(_ sender: UIButton) { // Do Connection With X Button
labelText.text = String((labelText.text?.dropLast())!) // Delete the last caracter and assign it
}
import UIKit
var str1 = "Hello, playground"
str1.removeLast()
print(str1)
var str2 = "Hello, playground"
str2.removeLast(3)
print(str2)
var str3 = "Hello, playground"
str3.removeFirst(2)
print(str3)
Output:-
Hello, playgroun
Hello, playgro
llo, playground
รหัสด้านบนฟรีฉันต้องการลบจุดเริ่มต้นของสตริงและไม่สามารถหาการอ้างอิงได้ทุกที่ นี่คือวิธีที่ฉันทำ:
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
ภายนอกข้อมูลรถนี้ 17 ตัวอักษรจากจุดเริ่มต้นของสตริง (เขาความยาวสตริงทั้งหมดคือ 67 เราล่วงหน้า -50 จากท้ายและคุณมีมัน