web-dev-qa-db-fra.com

Comment dois-je supprimer tous les espaces de début d'une chaîne? - swift

J'ai besoin d'un moyen de supprimer le premier caractère d'une chaîne qui est un espace. Je cherche une méthode ou même une extension pour le type String que je peux utiliser pour découper un caractère d'une chaîne.

155
dhruvm

Pour supprimer les espaces blancs de début et de fin:

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

Swift 3/Swift 4:

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

La bonne façon de supprimer toutes sortes d'espaces (en fonction de this SO answer ) est la suivante:

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

MODIFIER

Cette réponse a été publiée lorsque la question portait sur la suppression de tous les espaces , la question a été modifiée de manière à ne mentionner que les principaux espaces. Si vous souhaitez uniquement supprimer les espaces, utilisez les éléments suivants:

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

Cette extension String supprime tous les espaces d'une chaîne, pas seulement les espaces suivants:.

 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: "")
    }
  }

Exemple:

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

Swift

Vous pouvez simplement utiliser cette méthode pour supprimer tous les espaces normaux d'une chaîne (ne prend pas en compte tous les types d'espaces):

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

Le résultat sera:

HelloWorld!
42
Mykyta Savchuk

Vous pouvez également utiliser regex.

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

Pour Swift 3.0+ voir les autres réponses. C’est maintenant une réponse héritée pour Swift 2.x

Comme indiqué ci-dessus, puisque vous souhaitez supprimer le premier caractère, la méthode d'instance . StringByTrimmingCharactersInSet () fonctionnera parfaitement:

myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

Vous pouvez également créer vos propres jeux de caractères pour ajuster les limites de vos chaînes, par exemple:

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

Il existe également une méthode d'instance intégrée permettant de supprimer ou de remplacer des sous-chaînes, appelée stringByReplacingOccurrencesOfString (target: String, replacement: String) . Il peut supprimer des espaces ou tout autre motif se produisant n'importe où dans votre chaîne.

Vous pouvez spécifier des options et des plages, mais vous n'avez pas besoin de:

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

C'est un moyen facile de supprimer ou de remplacer tout motif répétitif de caractères de votre chaîne et de le chaîner, bien que chaque passage obligé doive effectuer une nouvelle passe à travers toute votre chaîne, ce qui en diminue l'efficacité. Donc, vous pouvez faire ceci:

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

... mais cela prendra deux fois plus de temps.

Documentation de. stringByReplacingOcurrencesOfString () à partir de Apple site

Le chaînage de ces méthodes d'instance de chaîne peut parfois s'avérer très pratique pour des conversions uniques, par exemple si vous souhaitez convertir un blob NSData court en chaîne hexadécimale sans espaces sur une ligne, vous pouvez le faire avec l'interpolation intégrée de Swift, ainsi que certains ajustements et découpages. en remplaçant:

("\(myNSDataBlob)").stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")).stringByReplacingOccurrencesOfString(" ", withString: "")
16
Water Not Words

Pour Swift 3.

import Foundation

var str = " Hear me calling"

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

str.stringByRemovingWhitespaces  // Hearmecalling
12
Dharmesh

Swift 4

L'excellent cas pour utiliser la regex:

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

// thisiswrongcontainedteeext
8
dimpiax

J'utiliserais cette extension pour être flexible et imiter la façon dont les autres collections le font:

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"
7
Jean-Philippe Pellet

Si vous souhaitez supprimer des espaces à l'avant (et à l'arrière) mais pas au milieu, vous devez utiliser stringByTrimmingCharactersInSet

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

Si vous souhaitez supprimer des espaces de n'importe où dans la chaîne, vous voudrez peut-être examiner stringByReplacing ...

6
Jeremy Pope

Vous pouvez aussi essayer ceci

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

Essayez la programmation fonctionnelle pour supprimer les espaces blancs:

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

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

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

Swift 3 version

  //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
NemSothea

Si quelqu'un supprime de l'espace supplémentaire dans la chaîne, par exemple = "This is the demo text remove extra space between the words."

Vous pouvez utiliser cette fonction dans 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
}

et le résultat sera

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

Découper les espaces dans Swift 4

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

Pour moi, la ligne suivante supprimait les espaces blancs.

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

Encore une autre réponse, la chaîne d’entrée peut parfois contenir plus d’un espace entre les mots. Si vous avez besoin de normaliser pour ne laisser qu'un espace entre les mots, essayez ceci (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 !"
0
Duyen-Hoa
string = string.filter ({!" ".contains($0) })
0
Fahim Rahman