Remove last character from string. Swift language

前端 未结 22 1676
Happy的楠姐
Happy的楠姐 2020-11-30 17:33

How can I remove last character from String variable using Swift? Can\'t find it in documentation.

Here is full example:

var expression = \"45+22\"
e         


        
相关标签:
22条回答
  • 2020-11-30 17:46

    Swift 3: When you want to remove trailing string:

    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 讨论(0)
  • 2020-11-30 17:48

    Swift 4

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

    or

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

    or

    welcome = String(welcome.dropLast())
    
    0 讨论(0)
  • 2020-11-30 17:49

    Another way If you want to remove one or more than one character from the end.

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

    Where XX is the number of characters you want to remove.

    0 讨论(0)
  • 2020-11-30 17:50

    Short answer (valid as of 2015-04-16): removeAtIndex(myString.endIndex.predecessor())

    Example:

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

    Meta:

    The language continues its rapid evolution, making the half-life for many formerly-good S.O. answers dangerously brief. It's always best to learn the language and refer to real documentation.

    0 讨论(0)
  • 2020-11-30 17:50

    Swift 4.2

    I also delete my last character from String (i.e. UILabel text) in IOS app

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

    0 讨论(0)
  • 2020-11-30 17:58

    Swift 4.0 (also 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

    The APIs have gotten a bit more swifty, and as a result the Foundation extension has changed a bit:

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

    Or the in-place version:

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

    Thanks Zmey, Rob Allen!

    Swift 2.0+ Way

    There are a few ways to accomplish this:

    Via the Foundation extension, despite not being part of the Swift library:

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

    Using the removeRange() method (which alters the name):

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

    Using the dropLast() function:

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

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

    Since String types in Swift aim to provide excellent UTF-8 support, you can no longer access character indexes/ranges/substrings using Int types. Instead, you use 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"
    

    Alternatively (for a more practical, but less educational example) you can use endIndex:

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

    Note: I found this to be a great starting point for understanding String.Index

    Old (pre-Beta 4) Way

    You can simply use the substringToIndex() function, providing it one less than the length of the String:

    let name: String = "Dolphin"
    name.substringToIndex(countElements(name) - 1) // "Dolphi"
    
    0 讨论(0)
提交回复
热议问题