Hapus karakter terakhir dari string. Bahasa cepat


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"

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

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.


9

Swift 4/5

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

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


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"

5

Cara termudah untuk memotong karakter terakhir dari string adalah:

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

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

2
let str = "abc"
let substr = str.substringToIndex(str.endIndex.predecessor())  // "ab"

2
var str = "Hello, playground"

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

println(str.stringByDeletingLastCharacter)   // "Hello, playgroun"

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"

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 .


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

1

Gunakan fungsinya advance(startIndex, endIndex):

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

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.


1

Swift 3 (menurut dokumen ) 20 November 2016

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

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)

0

The dropLast()fungsi menghilangkan elemen terakhir dari string.

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

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

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


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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.