Hat Swift eine Trimmmethode für String?

393

Hat Swift eine Trimmmethode für String? Zum Beispiel:

let result = " abc ".trim()
// result == "abc"
tounaobun
quelle
4
@ Mattdipasquale Trim ist ein sehr gebräuchlicher Name für diese Operation
Austin

Antworten:

831

So entfernen Sie alle Leerzeichen vom Anfang und Ende eines String.

(Beispiel mit Swift 2.0 getestet .)

let myString = "  \t\t  Let's trim all the whitespace  \n \t  \n  "
let trimmedString = myString.stringByTrimmingCharactersInSet(
    NSCharacterSet.whitespaceAndNewlineCharacterSet()
)
// Returns "Let's trim all the whitespace"

(Beispiel mit Swift 3+ getestet .)

let myString = "  \t\t  Let's trim all the whitespace  \n \t  \n  "
let trimmedString = myString.trimmingCharacters(in: .whitespacesAndNewlines)
// Returns "Let's trim all the whitespace"

Hoffe das hilft.

Sivanraj M.
quelle
Funktioniert nicht mit swif 1.2, da es keine automatische Konvention von String zu NSString gibt.
Elcuco
5
Es funktioniert gut in Swift 1.2 - das String-Objekt hat die stringByTrimmingCharactersInSet-Methode (es ist keine exklusive NSString-Methode)
Ben Dodson
8
In Swift 3.0 ist: let trimmedString = myString.trimmingCharacters (in: .whitespaces)
kikettas
6
Das heißt nicht, dass es veraltet ist. Noch verwenden nicht alle Swift 3.0.
c.dunlap
2
In Swift 3.0 werden dadurch keine Leerzeichen zwischen den Zeichenfolgen entfernt. Es werden nur führende und nachfolgende Leerzeichen entfernt. Siehe
130

Fügen Sie diesen Code in eine Datei in Ihrem Projekt ein. So etwas wie Utils.swift:

extension String
{   
    func trim() -> String
    {
        return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
    }
}

So können Sie Folgendes tun:

let result = " abc ".trim()
// result == "abc"

Swift 3.0-Lösung

extension String
{   
    func trim() -> String
   {
    return self.trimmingCharacters(in: NSCharacterSet.whitespaces)
   }
}

So können Sie Folgendes tun:

let result = " Hello World ".trim()
// result = "HelloWorld"
Thiago Arreguy
quelle
2
Ist das sicher Wie verhindere ich eine Kollision mit Methodennamen, wenn Apple oder eine Bibliothek eines Drittanbieters dieselbe Methode hinzufügt String?
ma11hew28
12
Erweiterungen sind sicher - und tatsächlich nutzt Apple sie in seinen internen APIs. Sie können keine Namenskollisionen verhindern, und das ist in der Tat gut. Sie erhalten einen Kompilierungsfehler, wenn Apple endlich eine trim () -Methode hinzufügt und Sie wissen, dass Ihre Erweiterung nicht mehr benötigt wird. Erweiterungen sind recht elegant und platzieren Methoden dort, wo Sie sie benötigen, anstatt in einer obskuren Dienstprogrammklasse wie StringUtils. Das Problem besteht darin, dass eine Klasse keine Methode hat, die ich benötige, weil kein anderes Framework importiert wurde, das Erweiterungen hinzugefügt hat.
Absmiths
3
Hey, in Swift 3 sollte zurückkehrenreturn self.trimmingCharacters(in: .whitespacesAndNewlines)
7
let result = "Hello World" .trim () // result = "HelloWorld" Dadurch werden die in der Zeichenfolge enthaltenen Leerzeichen nicht entfernt. entfernt nur führende und nachfolgende Leerzeichen.
Sahil
2
Dadurch werden keine Leerzeichen zwischen den Zeichenfolgen entfernt. Es werden nur führende und nachfolgende Leerzeichen entfernt. Der bessere Weg, um Leerzeichen zwischen Zeichenfolgen zu entfernen, ist die Verwendung Ihres Textes? .ReplacingOccurrences (von: "", mit: "") anstelle von trimmingCharacters
Umesh Sawant
57

In Swift 3.0

extension String
{   
    func trim() -> String
   {
    return self.trimmingCharacters(in: CharacterSet.whitespaces)
   }
}

Und du kannst anrufen

let result = " Hello World ".trim()  /* result = "Hello World" */
Bishow Gurung
quelle
4
Was ist, wenn ich nur nachgestellte und führende Leerzeichen kürzen möchte?
Suragch
1
Ich bin neu in Swift 3 Erweiterungen. Wenn eine Bibliothek String ändert und ich auch String ändere, können Kollisionen auftreten? Was ist, wenn zukünftige Versionen von swift ad a trim ()? Also ... im Grunde ... sind Erweiterungen so sicher zu verwenden?
Gattster
1
Es ist möglich, Kollisionen zu bekommen.
Alex Brown
let result = "Hello World" .trim () // result = "HelloWorld" Dadurch werden die in der Zeichenfolge enthaltenen Leerzeichen nicht entfernt. wird nur führende und nachfolgende Leerzeichen entfernen
Sahil
45

Swift 5 & 4.2

let trimmedString = " abc ".trimmingCharacters(in: .whitespaces)
 //trimmedString == "abc"
Saranjith
quelle
21

Swift 3

let result = " abc ".trimmingCharacters(in: .whitespacesAndNewlines)
Warif Akhand Rishi
quelle
@ LucasFarah sehen schnelle Entwicklung
Warif Akhand Rishi
Voraussichtliches Erscheinungsdatum: Ende 2016
Warif Akhand Rishi
1
Es ist eigentlich "whitespacesAndNewlines", haha, man ist noch übrig.
RainCast
9

Ja, das kannst du so machen:

var str = "  this is the answer   "
str = str.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
print(srt) // "this is the answer"

CharacterSet ist tatsächlich ein sehr leistungsfähiges Tool zum Erstellen einer Trimmregel mit viel mehr Flexibilität als ein vordefinierter Satz wie .whitespacesAndNewlines.

Zum Beispiel:

var str = " Hello World !"
let cs = CharacterSet.init(charactersIn: " !")
str = str.trimmingCharacters(in: cs)
print(str) // "Hello World"
Amin Aliari
quelle
6

Zeichenfolge auf bestimmte Länge kürzen

Wenn Sie einen Satz- / Textblock eingegeben haben und nur die angegebene Länge des Textes speichern möchten. Fügen Sie der Klasse die folgende Erweiterung hinzu

extension String {

   func trunc(_ length: Int) -> String {
    if self.characters.count > length {
        return self.substring(to: self.characters.index(self.startIndex, offsetBy: length))
    } else {
        return self
    }
  }

  func trim() -> String{
     return self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
   }

}

Verwenden

var str = "Lorem Ipsum is simply dummy text of the printing and typesetting industry."
//str is length 74
print(str)
//O/P:  Lorem Ipsum is simply dummy text of the printing and typesetting industry.

str = str.trunc(40)
print(str)
//O/P: Lorem Ipsum is simply dummy text of the 
ViJay Avhad
quelle
5

Sie können die trim () -Methode in einer Swift String-Erweiterung verwenden, die ich unter https://bit.ly/JString geschrieben habe .

var string = "hello  "
var trimmed = string.trim()
println(trimmed)// "hello"
William Falcon
quelle
sieht gut aus. Ich werde das benutzen.
Philipp
5

Ein anderer ähnlicher Weg:

extension String {
    var trimmed:String {
        return self.trimmingCharacters(in: CharacterSet.whitespaces)
    }
}

Verwenden:

let trimmedString = "myString ".trimmed
user23
quelle
4
extension String {
    /// EZSE: Trims white space and new line characters
    public mutating func trim() {
         self = self.trimmed()
    }

    /// EZSE: Trims white space and new line characters, returns a new string
    public func trimmed() -> String {
        return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
    }
}

Entnommen aus meinem Repo: https://github.com/goktugyil/EZSwiftExtensions/commit/609fce34a41f98733f97dfd7b4c23b5d16416206

Esqarrouth
quelle
Ich mag das schnelle konforme Verbing für nicht mutieren.
Alex Brown
4

In Swift3 XCode 8 Final

Beachten Sie, dass das CharacterSet.whitespaceskeine Funktion mehr ist!

(Weder ist NSCharacterSet.whitespaces)

extension String {
    func trim() -> String {
        return self.trimmingCharacters(in: CharacterSet.whitespaces)
    }
}
Martin Algesten
quelle
3

// Swift 4.0 Leerzeichen und neue Zeilen entfernen

extension String {
    func trim() -> String {
        return self.trimmingCharacters(in: .whitespacesAndNewlines)         
    }
}
Danielvgftv
quelle
2

Sie können auch Zeichen senden, die gekürzt werden sollen

extension String {


    func trim() -> String {

        return self.trimmingCharacters(in: .whitespacesAndNewlines)

    }

    func trim(characterSet:CharacterSet) -> String {

        return self.trimmingCharacters(in: characterSet)

    }
}

validationMessage = validationMessage.trim(characterSet: CharacterSet(charactersIn: ","))
Varun Naharia
quelle
0

Ich habe diese Funktion erstellt, die die Eingabe einer Zeichenfolge ermöglicht und eine Liste von Zeichenfolgen zurückgibt, die von einem beliebigen Zeichen abgeschnitten werden

 func Trim(input:String, character:Character)-> [String]
{
    var collection:[String] = [String]()
    var index  = 0
    var copy = input
    let iterable = input
    var trim = input.startIndex.advancedBy(index)

    for i in iterable.characters

    {
        if (i == character)
        {

            trim = input.startIndex.advancedBy(index)
            // apennding to the list
            collection.append(copy.substringToIndex(trim))

            //cut the input
            index += 1
            trim = input.startIndex.advancedBy(index)
            copy = copy.substringFromIndex(trim)

            index = 0
        }
        else
        {
            index += 1
        }
    }
    collection.append(copy)
    return collection

}

da ich keinen Weg gefunden habe, dies in Swift zu tun (kompiliert und funktioniert perfekt in Swift 2.0)

Yeis Gallegos
quelle
2
Können Sie anhand eines Beispiels definieren, was Sie unter "Trimmen" verstehen? Da Ihr Rückgabetyp [String] ist, können Sie nicht implementieren, was das OP angefordert hat. (was einen String zurückgibt)
Alex Brown
0

Vergiss nicht import Foundationoder UIKit.

import Foundation
let trimmedString = "   aaa  "".trimmingCharacters(in: .whitespaces)
print(trimmedString)

Ergebnis:

"aaa"

Andernfalls erhalten Sie:

error: value of type 'String' has no member 'trimmingCharacters'
    return self.trimmingCharacters(in: .whitespaces)
NonCreature0714
quelle