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.
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)
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("")
}
}
extension String {
func removingWhitespaces() -> String {
return components(separatedBy: .whitespaces).joined()
}
}
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...])
}
}
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.
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!
Vous pouvez également utiliser regex.
let trimmedString = myString.stringByReplacingOccurrencesOfString("\\s", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: nil)
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: "")
Pour Swift 3.
import Foundation
var str = " Hear me calling"
extension String {
var stringByRemovingWhitespaces: String {
return components(separatedBy: .whitespaces).joined()
}
}
str.stringByRemovingWhitespaces // Hearmecalling
L'excellent cas pour utiliser la regex:
" this is wrong contained teee xt "
.replacingOccurrences(of: "^\\s+|\\s+|\\s+$",
with: "",
options: .regularExpression)
// thisiswrongcontainedteeext
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"
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 ...
Vous pouvez aussi essayer ceci
let updatedString = searchedText?.stringByReplacingOccurrencesOfString(" ", withString: "-")
Essayez la programmation fonctionnelle pour supprimer les espaces blancs:
extension String {
func whiteSpacesRemoved() -> String {
return self.filter { $0 != Character(" ") }
}
}
extension String {
var removingWhitespaceAndNewLines: String {
return removing(.whitespacesAndNewlines)
}
func removing(_ forbiddenCharacters: CharacterSet) -> String {
return String(unicodeScalars.filter({ !forbiddenCharacters.contains($0) }))
}
}
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)
}
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."
let strFirstName = txtFirstName.text?.trimmingCharacters(in:
CharacterSet.whitespaces)
Pour moi, la ligne suivante supprimait les espaces blancs.
let result = String(yourString.filter {![" ", "\t", "\n"].contains($0)})
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 !"
string = string.filter ({!" ".contains($0) })