Hapus karakter terakhir dari string. Bahasa cepat

243

Bagaimana saya bisa menghapus karakter terakhir dari variabel String menggunakan Swift? Tidak dapat menemukannya di dokumentasi.

Berikut ini contoh lengkapnya:

var expression = "45+22"
expression = expression.substringToIndex(countElements(expression) - 1)
Konstantin Cherkasov
sumber
2
2017, JAWABAN MODERN: stackoverflow.com/a/39610807/294884
Fattie

Jawaban:

539

Swift 4.0 (juga 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)

Swift 3.0

API mendapatkan sedikit lebih swifty , dan sebagai hasilnya perpanjangan Foundation telah berubah sedikit:

var name: String = "Dolphin"
var truncated = name.substring(to: name.index(before: name.endIndex))
print(name)      // "Dolphin"
print(truncated) // "Dolphi"

Atau versi di tempat:

var name: String = "Dolphin"
name.remove(at: name.index(before: name.endIndex))
print(name)      // "Dolphi"

Terima kasih Zmey, Rob Allen!

Swift 2.0+ Way

Ada beberapa cara untuk mencapai ini:

Melalui ekstensi Foundation, meskipun tidak menjadi bagian dari perpustakaan Swift:

var name: String = "Dolphin"
var truncated = name.substringToIndex(name.endIndex.predecessor())
print(name)      // "Dolphin"
print(truncated) // "Dolphi"

Menggunakan removeRange()metode (yang alter yang name):

var name: String = "Dolphin"    
name.removeAtIndex(name.endIndex.predecessor())
print(name) // "Dolphi"

Menggunakan dropLast()fungsi:

var name: String = "Dolphin"
var truncated = String(name.characters.dropLast())
print(name)      // "Dolphin"
print(truncated) // "Dolphi"

Old String.Index (Xcode 6 Beta 4 +) Way

Karena Stringtipe dalam Swift bertujuan untuk memberikan dukungan UTF-8 yang sangat baik, Anda tidak dapat lagi mengakses indeks karakter / rentang / substring menggunakan Inttipe. Sebaliknya, Anda menggunakan 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"

Atau (untuk contoh yang lebih praktis, tetapi kurang mendidik) Anda dapat menggunakan endIndex:

let name: String = "Dolphin"
name.substringToIndex(name.endIndex.predecessor()) // "Dolphi"

Catatan: Saya menemukan ini sebagai titik awal yang bagus untuk memahamiString.Index

Cara Lama (pra-Beta 4)

Anda cukup menggunakan substringToIndex()fungsi tersebut, dengan menyediakan fungsi yang kurang dari panjang String:

let name: String = "Dolphin"
name.substringToIndex(countElements(name) - 1) // "Dolphi"
Craig Otis
sumber
Pada Xcode 6 beta 6: 'String' tidak memiliki anggota bernamasubstringToIndex
ielyamani
2
Hei, kepala, pastikan itu substringToIndexbukan substringFromIndex. Itu tidak membuat Anda merasa salah mengira ini, izinkan saya memberi tahu Anda.
Louie Bertoncin
2
Ini benar, pada 21 Juli, Xcode 7 Beta 4 mengatakan 'String' tidak memiliki nama anggota substringToIndex. Juga, pada Xcode 7, string tidak lagi memiliki .countproperti, sekarang hanya berlaku untuk karakter:string.characters.count
kakubei
2
Swift 3:var truncated = name.substring(to: name.index(before: name.endIndex))
Zmey
2
Jawaban Anda adalah sejarah evolusi Swift.
DawnSong
89

Fungsi global dropLast()bekerja pada urutan dan karenanya pada Strings:

var expression  = "45+22"
expression = dropLast(expression)  // "45+2"

// in Swift 2.0 (according to cromanelli's comment below)
expression = String(expression.characters.dropLast())
gui_dos
sumber
3
Dalam Swift 2.0 charactersproperti pada String menghasilkan urutan, oleh karena itu sekarang Anda harus menggunakan: expression = expression.characters.dropLast()
gui_dos
5
Dalam Swift 2.0 untuk harus melemparkan hasilnya dengan benar expression = String(expression.characters.dropLast())jika Anda ingin kembali sebagai String
cromanelli
69

Swift 4:

let choppedString = String(theString.dropLast())

Di Swift 2, lakukan ini:

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

Saya merekomendasikan tautan ini untuk mendapatkan pemahaman tentang string Swift.

jrc
sumber
9

Swift 4/5

var str = "bla"
str.removeLast() // returns "a"; str is now "bl"
idrougge
sumber
8

Ini adalah Formulir Ekstensi 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))
    }
}

untuk versi Swift lebih awal dari 1.2:

...
let stringLength = countElements(self)
...

Pemakaian:

var str_1 = "Maxim"
println("output: \(str_1.removeCharsFromEnd(1))") // "Maxi"
println("output: \(str_1.removeCharsFromEnd(3))") // "Ma"
println("output: \(str_1.removeCharsFromEnd(8))") // ""

Referensi:

Ekstensi menambahkan fungsionalitas baru ke kelas, struktur, atau tipe enumerasi yang ada. Ini termasuk kemampuan untuk memperluas jenis yang Anda tidak memiliki akses ke kode sumber asli (dikenal sebagai pemodelan retroaktif). Ekstensi mirip dengan kategori di Objective-C. (Tidak seperti kategori Objective-C, ekstensi Swift tidak memiliki nama.)

Lihat DOCS

Maxim Shoustin
sumber
Hai, sudahkah Anda menguji emoji?
ZYiOS
@ZuYuan apa itu emoji?
Maxim Shoustin
6

Gunakan fungsinya removeAtIndex(i: String.Index) -> Character:

var s = "abc"    
s.removeAtIndex(s.endIndex.predecessor())  // "ab"
Anton Serkov
sumber
5

Cara termudah untuk memotong karakter terakhir dari string adalah:

title = title[title.startIndex ..< title.endIndex.advancedBy(-1)]
Kunal
sumber
Terima kasih, cara yang sangat elegan untuk menghapus karakter sebanyak yang Anda inginkan dari akhir sebuah string.
Letaief Achraf
5

Cepat 4

var welcome = "Hello World!"
welcome = String(welcome[..<welcome.index(before:welcome.endIndex)])

atau

welcome.remove(at: welcome.index(before: welcome.endIndex))

atau

welcome = String(welcome.dropLast())
Carien van Zyl
sumber
2
let str = "abc"
let substr = str.substringToIndex(str.endIndex.predecessor())  // "ab"
Channing
sumber
2
var str = "Hello, playground"

extension String {
    var stringByDeletingLastCharacter: String {
        return dropLast(self)
    }
}

println(str.stringByDeletingLastCharacter)   // "Hello, playgroun"
Leo Dabus
sumber
kkkk Aku bahkan tidak ingat yang ini (Swift 1.2 di atas). untuk versi Swift 3 stackoverflow.com/a/40028338/2303865
Leo Dabus
2

Kategori cepat yang bermutasi:

extension String {
    mutating func removeCharsFromEnd(removeCount:Int)
    {
        let stringLength = count(self)
        let substringIndex = max(0, stringLength - removeCount)
        self = self.substringToIndex(advance(self.startIndex, substringIndex))
    }
}

Menggunakan:

var myString = "abcd"
myString.removeCharsFromEnd(2)
println(myString) // "ab"
Sunkas
sumber
2

Jawaban singkat (berlaku mulai 2015-04-16): removeAtIndex(myString.endIndex.predecessor())

Contoh:

var howToBeHappy = "Practice compassion, attention and gratitude. And smile!!"
howToBeHappy.removeAtIndex(howToBeHappy.endIndex.predecessor())
println(howToBeHappy)
// "Practice compassion, attention and gratitude. And smile!"

Meta:

Bahasa ini melanjutkan evolusinya yang cepat, menjadikan waktu paruh bagi banyak jawaban SO yang sebelumnya baik menjadi sangat singkat. Itu selalu terbaik untuk mempelajari bahasa dan merujuk ke dokumentasi nyata .

setiap minggu
sumber
2

Dengan penggunaan jenis Substring baru:

Swift 4:

var before: String = "Hello world!"
var lastCharIndex: Int = before.endIndex
var after:String = String(before[..<lastCharIndex])
print(after) // Hello world

Cara yang lebih pendek:

var before: String = "Hello world!"
after = String(before[..<before.endIndex])
print(after) // Hello world
Jorge Ramírez
sumber
1

Gunakan fungsinya advance(startIndex, endIndex):

var str = "45+22"
str = str.substringToIndex(advance(str.startIndex, countElements(str) - 1))
Chen Rui
sumber
1

Cara lain Jika Anda ingin menghapus satu atau lebih dari satu karakter dari akhir.

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

Di mana XX adalah jumlah karakter yang ingin Anda hapus.

Kaiusee
sumber
1

Swift 3 (menurut dokumen ) 20 November 2016

let range = expression.index(expression.endIndex, offsetBy: -numberOfCharactersToRemove)..<expression.endIndex
expression.removeSubrange(range)
narco
sumber
0

Saya akan merekomendasikan menggunakan NSString untuk string yang ingin Anda manipulasi. Sebenarnya kalau dipikir-pikir itu sebagai pengembang saya tidak pernah mengalami masalah dengan NSString bahwa Swift String akan menyelesaikan ... Saya mengerti seluk-beluk. Tetapi saya belum memiliki kebutuhan aktual untuk mereka.

var foo = someSwiftString as NSString

atau

var foo = "Foo" as NSString

atau

var foo: NSString = "blah"

Dan kemudian seluruh dunia operasi string NSString sederhana terbuka untuk Anda.

Sebagai jawaban atas pertanyaan

// check bounds before you do this, e.g. foo.length > 0
// Note shortFoo is of type NSString
var shortFoo = foo.substringToIndex(foo.length-1)
n13
sumber
0

The dropLast()fungsi menghilangkan elemen terakhir dari string.

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

sumber
0

Swift 3 : Saat Anda ingin menghapus string tambahan:

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
    }
}
slashlos
sumber
0

Cepat 4.2

Saya juga menghapus karakter terakhir saya dari String (yaitu teks UILabel ) di aplikasi 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 StoryBoard

Ashfaqur_Rahman
sumber
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
Deepak Tagadiya
sumber
0

melengkapi kode di atas saya ingin menghapus awal string dan tidak dapat menemukan referensi di mana pun. Inilah cara saya melakukannya:

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

Ini memangkas 17 karakter dari awal string (total panjang string adalah 67 kita maju -50 dari akhir dan di sana Anda memilikinya.

Sophman
sumber