ลบอักขระตัวสุดท้ายออกจากสตริง ภาษาที่รวดเร็ว


243

ฉันจะลบอักขระตัวสุดท้ายออกจากตัวแปร String โดยใช้ Swift ได้อย่างไร ไม่พบในเอกสาร

นี่คือตัวอย่างเต็มรูปแบบ:

var expression = "45+22"
expression = expression.substringToIndex(countElements(expression) - 1)

คำตอบ:


539

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"

ใน Xcode 6 beta 6: 'String' ไม่มีสมาชิกชื่อsubstringToIndex
ielyamani

2
Hey, หัวขึ้นให้แน่ใจว่ามันไม่ได้substringToIndex substringFromIndexมันไม่ได้ทำให้คุณรู้สึกผิดพลาดอย่างชาญฉลาดให้ฉันบอกคุณ
Louie Bertoncin

2
นี่คือความจริงเป็นวันที่ 21 กรกฏาคม Xcode 7 Beta 4 กล่าวว่า 'String' substringToIndexไม่ได้เป็นสมาชิกชื่อ นอกจากนี้ในฐานะของ Xcode 7 สตริงไม่มี.countคุณสมบัติอีกต่อไปตอนนี้มันจะถูกนำไปใช้กับตัวละครเท่านั้น:string.characters.count
kakubei

2
Swift 3:var truncated = name.substring(to: name.index(before: name.endIndex))
Zmey

2
คำตอบของคุณคือประวัติศาสตร์วิวัฒนาการสวิฟท์
DawnSong

89

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())

3
ใน Swift 2.0 charactersคุณสมบัติบน String จะส่งลำดับดังนั้นตอนนี้คุณต้องใช้: expression = expression.characters.dropLast()
gui_dos

5
ใน Swift 2.0 คุณจะต้องส่งผลอย่างถูกต้องexpression = String(expression.characters.dropLast())หากคุณต้องการให้มันกลับมาเป็น String
cromanelli

69

สวิฟท์ 4:

let choppedString = String(theString.dropLast())

ใน Swift 2 ให้ทำสิ่งนี้:

let choppedString = String(theString.characters.dropLast())

ฉันแนะนำลิงก์นี้เพื่อทำความเข้าใจกับสตริงของ Swift



8

นี่คือฟอร์มส่วนขยายของสตริง:

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


สวัสดีคุณทดสอบอิโมจิหรือยัง
ZYiOS

@ZuYuan อีโมจิคืออะไร?
Maxim Shoustin


5

วิธีที่ง่ายที่สุดในการตัดอักขระตัวสุดท้ายของสตริงคือ:

title = title[title.startIndex ..< title.endIndex.advancedBy(-1)]

ขอบคุณวิธีที่ดีมากในการลบอักขระได้มากเท่าที่คุณต้องการจากจุดสิ้นสุด
Letaief Achraf

5

สวิฟต์ 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())



2

หมวดหมู่ที่รวดเร็วที่กลายพันธุ์:

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"

2

คำตอบสั้น ๆ (ใช้ได้ตั้งแต่ 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 ที่ดีขึ้น แต่ก่อนหลายคำตอบสั้น ๆ อันตราย มันเสมอดีที่สุดในการเรียนรู้ภาษาและการอ้างอิงถึงจริงเอกสาร


2

ด้วยการใช้ชนิดสตริงย่อยใหม่:

สวิฟท์ 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


1

อีกวิธีหนึ่งถ้าคุณต้องการที่จะลบหนึ่งหรือมากกว่าหนึ่งตัวละครมากกว่าหนึ่งจากปลาย

var myStr = "Hello World!"
myStr = (myStr as NSString).substringToIndex((myStr as NSString).length-XX)

โดยที่XXคือจำนวนอักขระที่คุณต้องการลบ



0

ฉันขอแนะนำให้ใช้ 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)

0

dropLast()ฟังก์ชั่นเอาองค์ประกอบสุดท้ายของสตริง

var expression = "45+22"
expression = expression.dropLast()

0

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
    }
}

0

สวิฟท์ 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

}

กระดานเรื่องราวของ IOS APP


0
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

0

รหัสด้านบนฟรีฉันต้องการลบจุดเริ่มต้นของสตริงและไม่สามารถหาการอ้างอิงได้ทุกที่ นี่คือวิธีที่ฉันทำ:

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 จากท้ายและคุณมีมัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.