80

Is there a quick way to remove the last two characters in a String in Swift? I see there is a simple way to remove the last character as clearly noted here. Do you know how to remove the last two characters? Thanks!

1

5 Answers 5

169

update: Xcode 9 • Swift 4 or later

String now conforms to RangeReplaceableCollection so you can use collection method dropLast straight in the String and therefore an extension it is not necessary anymore. The only difference is that it returns a Substring. If you need a String you need to initialize a new one from it:

let string = "0123456789" let substring1 = string.dropLast(2) // "01234567" let substring2 = substring1.dropLast() // "0123456" let result = String(substring2.dropLast()) // "012345" 

We can also extend LosslessStringConvertible to add trailing syntax which I think improves readability:

extension LosslessStringConvertible { var string: String { .init(self) } } 

Usage:

let result = substring.dropLast().string 
Sign up to request clarification or add additional context in comments.

3 Comments

I just love swift.
Note that String.dropLast() returns a Substring so you may need to convert it to a String depending on how you're using it.
@Uncommon if you read the whole answer you would see that it is already stated in the post
61
var name: String = "Dolphin" let endIndex = name.index(name.endIndex, offsetBy: -2) let truncated = name.substring(to: endIndex) print(name) // "Dolphin" print(truncated) // "Dolph" 

4 Comments

You just copy pasted from the link given by OP
The original link removes the last character, not the last two
In contrast to the dropLast(..) method shown in @LeoDabus answer, the method in this answer will yield a runtime exception for strings that are less than two characters (empty of only one character). Also, whereas the dropLast method is Swift native, .substring is bridged via Foundation from NSString (not entirely Swift native).
wouldn't better question be, how to select the first N characters, otherwise you need to test you'd have enough to stay non-nil
27

swift 4:

let str = "Hello, playground" let newSTR1 = str.dropLast(3) print(newSTR1) output: "Hello, playgro" //---------------// let str = "Hello, playground" let newSTR2 = str.dropFirst(2) print(newSTR2) output: "llo, playground" 

Comments

2

Better to use removeLast()

var myString = "Hello world" myString.removeLast(2) output : "Hello wor" 

1 Comment

This will fail if the string is shorter than 2. Per the docs: "Attempting to remove more elements than exist in the collection triggers a runtime error."
1

Use removeSubrange(Range<String.Index>) just like:

var str = "Hello, playground" str.removeSubrange(Range(uncheckedBounds: (lower: str.index(str.endIndex, offsetBy: -2), upper: str.endIndex))) 

This will crash if the string is less than 2 characters long. Is that a requirement for you?

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.