Come devo rimuovere tutti gli spazi iniziali da una stringa? - veloce


170

Ho bisogno di un modo per rimuovere il primo carattere da una stringa che è uno spazio. Sto cercando un metodo o anche un'estensione per il tipo String che posso usare per ritagliare un carattere di una stringa.


8
Vuoi rimuovere il primo carattere di spazio o tutti i caratteri di spazio nella stringa?
Alex,

Risposte:


380

Per rimuovere spazi bianchi iniziali e finali:

let trimmedString = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

Swift 3 / Swift 4:

let trimmedString = string.trimmingCharacters(in: .whitespaces)

180
questo funzionerà solo per spazi bianchi principali e finali. questo non rimuoverà gli spazi bianchi contenuti nella stringa.
domenica

87
se vuoi rimuovere tutti gli spazi vuoti puoi provare myString.stringByReplacingOccurrencesOfString ("", withString: "")
Lucas

6
Puoi anche usare NSCharacterSet.whitespaceAndNewlineCharacterSet()se vuoi tagliare anche i caratteri di nuova riga.
Blip,

2
Per farlo funzionare con Swift 3.0 e anche rimuovere gli spazi bianchi tra archi, uso risposta: stackoverflow.com/a/39067610/4886069

2
Utente Swift 3+: yourString.replacingOccurrences (di: "", con: "")
Nadeesha Lakmal

144

Il modo corretto quando si desidera rimuovere tutti i tipi di spazi bianchi (in base a questa risposta SO ) è:

extension String {
    var stringByRemovingWhitespaces: String {
        let components = componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
        return components.joinWithSeparator("")
    }
}

Swift 3.0+ (3.0, 3.1, 3.2, 4.0)

extension String {
    func removingWhitespaces() -> String {
        return components(separatedBy: .whitespaces).joined()
    }
}

MODIFICARE

Questa risposta è stata pubblicata quando la domanda riguardava la rimozione di tutti gli spazi bianchi, la domanda è stata modificata per menzionare solo i principali spazi bianchi. Se desideri rimuovere solo gli spazi bianchi principali, utilizza quanto segue:

extension String {
    func removingLeadingSpaces() -> String {
        guard let index = firstIndex(where: { !CharacterSet(charactersIn: String($0)).isSubset(of: .whitespaces) }) else {
            return self
        }
        return String(self[index...])
    }
}

5
anche .components (separati da: .whitespacesAndNewlines) anche per le nuove linee
Derek,

Questa dovrebbe essere una funzione non una var
Jakub Truhlář

1
A causa della logica della funzione . Stai creando una proprietà calcolata quando dovresti creare una funzione . Sta facendo smt piuttosto che mantenere un valore o calcolarlo da un altro. Guardate: stackoverflow.com/questions/24035276/...
Jakub Truhlář

4
@ JakubTruhlář - Questa è una questione di opinione, non una dichiarazione di fatto. Vedi softwareengineering.stackexchange.com/questions/304077/…
Ashley Mills

1
@ JakubTruhlář Dici "Questo dovrebbe essere un func non un var" - sembra molto come se tu stessi affermando un fatto, non la tua opinione. Se leggi le risposte alla domanda collegata, vedrai che mentre "ha senso" per te, per le altre persone ... non necessariamente.
Ashley Mills,

82

Questa estensione String rimuove tutto lo spazio bianco da una stringa, non solo lo spazio bianco finale ...

 extension String {
    func replace(string:String, replacement:String) -> String {
        return self.replacingOccurrences(of: string, with: replacement, options: NSString.CompareOptions.literal, range: nil)
    }

    func removeWhitespace() -> String {
        return self.replace(string: " ", replacement: "")
    }
  }

Esempio:

let string = "The quick brown dog jumps over the foxy lady."
let result = string.removeWhitespace() // Thequickbrowndogjumpsoverthefoxylady.

4
Funziona solo per "" (non considera altri tipi di spazi bianchi)
fpg1503

@ fpg1503 quali altri tipi di spazi bianchi?
Ricardo,

Quelli definiti nella categoria Zs: fileformat.info/info/unicode/category/Zs/list.htm
fpg1503

45

Swift 3

Puoi semplicemente usare questo metodo per rimuovere tutti gli spazi normali in una stringa (non considera tutti i tipi di spazi bianchi):

let myString = " Hello World ! "
let formattedString = myString.replacingOccurrences(of: " ", with: "")

Il risultato sarà:

HelloWorld!

1
Funziona solo per "" (non considera altri tipi di spazi bianchi)
fpg1503

@Greg ti mancano ancora altri 16 personaggi: fileformat.info/info/unicode/category/Zs/list.htm
fpg1503

18

Puoi anche usare regex.

let trimmedString = myString.stringByReplacingOccurrencesOfString("\\s", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: nil)

Swift 4: myString.replacingOccurrences (of: "\\ s", con: "", opzioni: NSString.CompareOptions.regularExpression, intervallo: zero)
norbDEV,

16

Per Swift 3.0+ vedi le altre risposte. Questa è ora una risposta legacy per Swift 2.x

Come spiegato sopra, poiché sei interessato a rimuovere il primo carattere, il metodo di istanza .stringByTrimmingCharactersInSet () funzionerà bene:

myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

Puoi anche creare i tuoi set di caratteri per tagliare i confini delle tue stringhe, ad esempio:

myString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>"))

Esiste anche un metodo di istanza incorporato per gestire la rimozione o la sostituzione di sottostringhe chiamato stringByReplacingOccurrencesOfString (target: String, sostituzione: String) . Può rimuovere spazi o altri schemi che si verificano in qualsiasi punto della stringa

È possibile specificare opzioni e intervalli, ma non è necessario:

myString.stringByReplacingOccurrencesOfString(" ", withString: "")

Questo è un modo semplice per rimuovere o sostituire qualsiasi motivo ripetuto di caratteri nella stringa e può essere incatenato, anche se ogni volta deve passare un altro passaggio attraverso l'intera stringa, diminuendo l'efficienza. Quindi puoi farlo:

 myString.stringByReplacingOccurrencesOfString(" ", withString: "").stringByReplacingOccurrencesOfString(",", withString: "")

... ma ci vorrà il doppio del tempo.

.stringByReplacingOccurrencesOfString () documentazione dal sito Apple

Concatenare questi metodi di istanza String a volte può essere molto conveniente per conversioni una tantum, ad esempio se si desidera convertire un blob NSData breve in una stringa esadecimale senza spazi in una riga, è possibile farlo con l'interpolazione String incorporata di Swift e alcuni ritagli e sostituzione:

("\(myNSDataBlob)").stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")).stringByReplacingOccurrencesOfString(" ", withString: "")

Funziona solo per "" (non considera altri tipi di spazi bianchi)
fpg1503

Non considera ancora altri tipi di spazi bianchi nel mezzo della stringa
fpg1503

12

Per swift 3.0

import Foundation

var str = " Hear me calling"

extension String {
    var stringByRemovingWhitespaces: String {
        return components(separatedBy: .whitespaces).joined()
    }
}

str.stringByRemovingWhitespaces  // Hearmecalling

8

Swift 4

Il caso eccellente per usare il regex:

" this is    wrong contained teee xt     "
    .replacingOccurrences(of: "^\\s+|\\s+|\\s+$", 
                          with: "", 
                          options: .regularExpression)

// thisiswrongcontainedteeext

7

Userei questa estensione, per essere flessibile e imitare il modo in cui lo fanno altre collezioni:

extension String {
    func filter(pred: Character -> Bool) -> String {
        var res = String()
        for c in self.characters {
            if pred(c) {
                res.append(c)
            }
        }
        return res
    }
}

"this is a String".filter { $0 != Character(" ") } // "thisisaString"

Funziona solo per "" (non considera altri tipi di spazi bianchi)
fpg1503

6

Se si desidera rimuovere gli spazi dalla parte anteriore (e posteriore) ma non dal centro, è necessario utilizzare stringByTrimmingCharactersInSet

    let dirtyString   = " First Word "
    let cleanString = dirtyString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

Se vuoi rimuovere spazi da qualsiasi punto della stringa, allora potresti voler guardare stringByReplacing ...


Come rimuovere anche lo spazio intermedio?
Nikhil Gupta,

@NikhilGupta no, solo in testa e in coda (i " First Word "risultati di esempio "First Word").
fpg1503,

6

Swift 4, 4.2 e 5

Rimuovere lo spazio solo dalla parte anteriore e finale

let str = "  Akbar Code  "
let trimmedString = str.trimmingCharacters(in: .whitespacesAndNewlines)

Rimuovi gli spazi da ogni punto della stringa

let stringWithSpaces = " The Akbar khan code "
let stringWithoutSpaces = stringWithSpaces.replacingOccurrences(of: " ", with: "")

3

Puoi provare anche questo

   let updatedString = searchedText?.stringByReplacingOccurrencesOfString(" ", withString: "-")

Funziona solo per "" (non considera altri tipi di spazi bianchi)
fpg1503

3

Prova la programmazione funzionale per rimuovere gli spazi bianchi:

extension String {
  func whiteSpacesRemoved() -> String {
    return self.filter { $0 != Character(" ") }
  }
}

3
extension String {

    var removingWhitespaceAndNewLines: String {
        return removing(.whitespacesAndNewlines)
    }

    func removing(_ forbiddenCharacters: CharacterSet) -> String {
        return String(unicodeScalars.filter({ !forbiddenCharacters.contains($0) }))
    }
}

3

Se qualcuno rimuove lo spazio aggiuntivo dalla stringa, ad es. = "This is the demo text remove extra space between the words."

È possibile utilizzare questa funzione in Swift 4.

func removeSpace(_ string: String) -> String{
    var str: String = String(string[string.startIndex])
    for (index,value) in string.enumerated(){
        if index > 0{
            let indexBefore = string.index(before: String.Index.init(encodedOffset: index))
            if value == " " && string[indexBefore] == " "{
            }else{
                str.append(value)
            }
        }
    }
    return str
}

e il risultato sarà

"This is the demo text remove extra space between the words."

3

Salve, potrebbe essere tardi, ma vale la pena provare. Questo proviene da un file del parco giochi. Puoi renderlo un'estensione String.

Questo è scritto in Swift 5.3

Metodo 1:

var str = "\n \tHello, playground       "
if let regexp = try? NSRegularExpression(pattern: "^\\s+", options: NSRegularExpression.Options.caseInsensitive) {
    let mstr = NSMutableString(string: str)
    regexp.replaceMatches(in: mstr, options: [], range: NSRange(location: 0, length: str.count), withTemplate: "")
    str = mstr as String
}

Result: "Hello, playground       "

Metodo 2:

if let c = (str.first { !($0 == " " || $0 == "\t" || $0 == "\n") }) {
    if let nonWhiteSpaceIndex = str.firstIndex(of: c) {
        str.replaceSubrange(str.startIndex ..< nonWhiteSpaceIndex, with: "")
    }
}

Result: "Hello, playground       "

Questo è per Swift 5.x
Kyle Emmanuel il

Questo è fantastico! Grazie
RJ Uy

2

Versione Swift 3

  //This function trim only white space:
   func trim() -> String
        {
            return self.trimmingCharacters(in: CharacterSet.whitespaces)
        }
    //This function trim whitespeaces and new line that you enter:
     func trimWhiteSpaceAndNewLine() -> String
        {
            return self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
        }

2

Tagliare gli spazi bianchi in Swift 4

let strFirstName = txtFirstName.text?.trimmingCharacters(in: 
 CharacterSet.whitespaces)

2

Ancora un'altra risposta, a volte la stringa di input può contenere più di uno spazio tra le parole. Se devi standardizzare per avere solo 1 spazio tra le parole, prova questo (Swift 4/5)

let inputString = "  a very     strange   text !    "
let validInput = inputString.components(separatedBy:.whitespacesAndNewlines).filter { $0.count > 0 }.joined(separator: " ")

print(validInput) // "a very strange text !"

1

Per me, la seguente riga ha usato per rimuovere lo spazio bianco.

let result = String(yourString.filter {![" ", "\t", "\n"].contains($0)})


-1

Versione Swift 3 della risposta di BadmintonCat

extension String {
    func replace(_ string:String, replacement:String) -> String {
        return self.replacingOccurrences(of: string, with: replacement, options: NSString.CompareOptions.literal, range: nil)
    }

    func removeWhitespace() -> String {
        return self.replace(" ", replacement: "")
    }
}

Funziona solo per "" (non considera altri tipi di spazi bianchi)
fpg1503

Perché la tua risposta è sbagliata. Anche la risposta a cui hai fornito un aggiornamento è errata. Esistono diversi tipi di spazi bianchi ed è per questo che l'utilizzo whitespaceCharacterSetè una buona pratica.
fpg1503,

-1
class SpaceRemover
{
    func SpaceRemover(str :String)->String
    {
        var array = Array(str)
        var i = array.count
        while(array.last == " ")
        {
            var array1 = [Character]()
            for item in  0...i - 1
            {
                array1.append(array[item])
            }
            i = i - 1
            array = array1
            print(array1)
            print(array)

        }

        var arraySecond = array
        var j = arraySecond.count

        while(arraySecond.first == " ")
        {
            var array2 = [Character]()
            if j > 1
            {
                for item in 1..<j
                {
                    array2.append(arraySecond[item])
                }
            }
            j = j - 1
            arraySecond = array2
            print(array2)
            print(arraySecond)

        }
        print(arraySecond)
        return String(arraySecond)
    }
}

-2

Per rimuovere tutti gli spazi dalla stringa:

let space_removed_string = (yourstring?.components(separatedBy: " ").joined(separator: ""))!
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.