Swift a-t-il une méthode de découpage sur String?

393

Swift a-t-il une méthode de découpage sur String? Par exemple:

let result = " abc ".trim()
// result == "abc"
tounaobun
la source
4
@mattdipasquale trim est un nom très courant pour cette opération
Austin

Réponses:

831

Voici comment supprimer tous les espaces blancs du début et de la fin d'un fichier String.

(Exemple testé avec Swift 2.0 .)

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"

(Exemple testé avec Swift 3+ .)

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"

J'espère que cela t'aides.

Sivanraj M
la source
Ne fonctionnera pas sur swif 1.2, car il n'y a pas de convention automatique entre String et NSString.
elcuco
5
Cela fonctionne très bien dans Swift 1.2 - l'objet String a la méthode stringByTrimmingCharactersInSet (ce n'est pas une exclusivité NSString)
Ben Dodson
8
Dans Swift 3.0, c'est: let trimmedString = myString.trimmingCharacters (in: .whitespaces)
kikettas
6
Cela ne signifie pas qu'il est obsolète. Tout le monde n'utilise pas encore Swift 3.0.
c.dunlap
2
Dans Swift 3.0, cela ne supprimera pas les espaces blancs entre les chaînes. Cela supprimera uniquement les espaces blancs de début et de fin. Pour cela, référez-vous à cette réponse: stackoverflow.com/a/39067610/4886069
130

Mettez ce code sur un fichier de votre projet, quelque chose comme Utils.swift:

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

Vous pourrez donc faire ceci:

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

Solution Swift 3.0

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

Vous pourrez donc faire ceci:

let result = " Hello World ".trim()
// result = "HelloWorld"
Thiago Arreguy
la source
2
Est-ce sûr? Comment empêcher une collision de nom de méthode si Apple ou une bibliothèque tierce ajoute la même méthode String?
ma11hew28
12
Les extensions sont sûres - et en fait Apple en fait un usage prolifique dans leurs API internes. Vous ne pouvez pas empêcher les collisions de noms, et c'est en fait bien. Vous obtiendrez une erreur de compilation lorsque Apple ajoutera enfin une méthode trim () et vous saurez que votre extension n'est plus requise. Les extensions sont assez élégantes et placent les méthodes là où vous en avez besoin plutôt que certaines classes utilitaires obscures comme StringUtils - le problème que j'ai est lorsqu'une classe n'a pas la méthode dont j'ai besoin parce qu'un autre framework n'a pas été importé qui y a ajouté des extensions.
absmiths
3
Hey, dans Swift 3 devrait être de retourreturn self.trimmingCharacters(in: .whitespacesAndNewlines)
7
laissez result = "Hello World" .trim () // result = "HelloWorld" cela ne supprimera pas les espaces blancs contenus dans la chaîne. ne supprimera que les espaces de début et de fin.
Sahil
2
cela ne supprimera pas les espaces entre les chaînes. Il supprime uniquement les espaces de début et de fin. La meilleure façon de supprimer les espaces entre les chaînes est d'utiliser votre texte? .ReplacingOccurrences (of: "", with: "") au lieu d'utiliser trimmingCharacters
Umesh Sawant
57

Dans Swift 3.0

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

Et vous pouvez appeler

let result = " Hello World ".trim()  /* result = "Hello World" */
Bishow Gurung
la source
4
Que se passe-t-il si je souhaite uniquement supprimer les espaces de fin et de début?
Suragch
1
Je suis nouveau dans Swift 3 extensions. Si une bibliothèque modifie String et que je modifie également String, est-il possible d'obtenir des collisions? Et si les futures versions de swift ad une méthode trim ()? Donc .. en gros .. les extensions sont-elles sûres à utiliser comme ça?
Gattster
1
il est possible d'obtenir des collisions.
Alex Brown
laissez result = "Hello World" .trim () // result = "HelloWorld" cela ne supprimera pas les espaces blancs contenus dans la chaîne. ne supprimera que les espaces de début et de fin
Sahil
45

Swift 5 et 4.2

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

Swift 3

let result = " abc ".trimmingCharacters(in: .whitespacesAndNewlines)
Warif Akhand Rishi
la source
@LucasFarah voir évolution rapide
Warif Akhand Rishi
Date de sortie prévue: fin 2016
Warif Akhand Rishi
1
C'est en fait "whitespacesAndNewlines", haha, on est à gauche.
RainCast
9

Oui, vous pouvez le faire comme ceci:

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

CharacterSet est en fait un outil vraiment puissant pour créer une règle de découpage avec beaucoup plus de flexibilité qu'un ensemble prédéfini comme .whitespacesAndNewlines.

Par exemple:

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

Tronquer la chaîne à une longueur spécifique

Si vous avez entré un bloc de phrase / texte et que vous souhaitez enregistrer uniquement la longueur spécifiée hors de ce texte. Ajoutez l'extension suivante à la classe

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

}

Utilisation

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
la source
5

Vous pouvez utiliser la méthode trim () dans une extension Swift String que j'ai écrite https://bit.ly/JString .

var string = "hello  "
var trimmed = string.trim()
println(trimmed)// "hello"
William Falcon
la source
à l'air cool. Je vais l'utiliser.
philipp
5

Une autre manière similaire:

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

Utilisation:

let trimmedString = "myString ".trimmed
user23
la source
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())
    }
}

Tiré de ce repo à moi: https://github.com/goktugyil/EZSwiftExtensions/commit/609fce34a41f98733f97dfd7b4c23b5d16416206

Esqarrouth
la source
J'aime le verbe conforme rapide pour ne pas muter.
Alex Brown
4

Dans Swift3 XCode 8 Final

Notez que CharacterSet.whitespacesn'est plus une fonction!

(Ni l'un ni l'autre NSCharacterSet.whitespaces)

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

// Swift 4.0 Supprimer des espaces et de nouvelles lignes

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

Vous pouvez également envoyer des caractères que vous souhaitez couper

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
la source
0

J'ai créé cette fonction qui permet d'entrer une chaîne et retourne une liste de chaîne coupée par n'importe quel caractère

 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

}

as n'a pas trouvé de moyen de le faire dans swift (compile et fonctionne parfaitement dans swift 2.0)

Yeis Gallegos
la source
2
pouvez-vous définir ce que vous entendez par «couper», avec un exemple. Puisque votre type de retour est [String], vous ne pouvez pas implémenter ce que l'OP a demandé. (qui renvoie une chaîne)
Alex Brown
0

N'oubliez pas de import Foundationou UIKit.

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

Résultat:

"aaa"

Sinon, vous obtiendrez:

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