¿Cómo debo eliminar todos los espacios iniciales de una cadena? - rápido

170

Necesito una forma de eliminar el primer carácter de una cadena que es un espacio. Estoy buscando un método o incluso una extensión para el tipo de cadena que pueda usar para cortar un carácter de una cadena.

dhruvm
fuente
8
¿Desea eliminar el primer carácter de espacio o todos los caracteres de espacio en la cadena?
Alex

Respuestas:

380

Para eliminar espacios en blanco iniciales y finales:

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

Swift 3 / Swift 4:

let trimmedString = string.trimmingCharacters(in: .whitespaces)
Alex
fuente
180
esto solo funcionará para espacios en blanco iniciales y finales. esto no eliminará los espacios en blanco contenidos en la cadena.
dom
87
si desea eliminar todos los espacios en blanco, puede probar myString.stringByReplacingOccurrencesOfString ("", withString: "")
Lucas
66
También puede usar NSCharacterSet.whitespaceAndNewlineCharacterSet()si desea recortar caracteres de nueva línea también.
Blip
2
Para que funcione con Swift 3.0 y también elimine los espacios en blanco entre las cadenas, use la respuesta: stackoverflow.com/a/39067610/4886069
2
Usuario Swift 3+: yourString.replacingOccurrences (of: "", with: "")
Nadeesha Lakmal
144

La forma correcta cuando desea eliminar todo tipo de espacios en blanco (en base a esta respuesta SO ) es:

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

EDITAR

Esta respuesta se publicó cuando la pregunta era sobre la eliminación de todos los espacios en blanco, la pregunta se editó para mencionar solo los espacios en blanco principales. Si solo desea eliminar los espacios en blanco iniciales, use lo siguiente:

extension String {
    func removingLeadingSpaces() -> String {
        guard let index = firstIndex(where: { !CharacterSet(charactersIn: String($0)).isSubset(of: .whitespaces) }) else {
            return self
        }
        return String(self[index...])
    }
}
fpg1503
fuente
55
también .componentes (separados por: .whitespacesAndNewlines) para nuevas líneas también
Derek
Esto debería ser una función, no una var
Jakub Truhlář
1
Debido a la lógica de la función . Está haciendo una propiedad calculada cuando debería hacer una función . Está haciendo smt en lugar de mantener un valor o calcularlo a partir de otro. Mire: stackoverflow.com/questions/24035276/…
Jakub Truhlář
44
@ JakubTruhlář - Eso es una cuestión de opinión, no una declaración de hechos. Ver softwareengineering.stackexchange.com/questions/304077/…
Ashley Mills
1
@ JakubTruhlář Usted dice "Esto debería ser una función, no una var" . Esto suena como si estuviera diciendo un hecho, no su opinión. Si lees las respuestas a la pregunta vinculada, verás que si bien "tiene sentido" para ti, para otras personas ... no necesariamente.
Ashley Mills
82

Esta extensión de cadena elimina todo el espacio en blanco de una cadena, no solo el espacio en blanco final ...

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

Ejemplo:

let string = "The quick brown dog jumps over the foxy lady."
let result = string.removeWhitespace() // Thequickbrowndogjumpsoverthefoxylady.
BádmintonGato
fuente
44
Solo funciona para "" (no considera otros tipos de whitesapce)
fpg1503
@ fpg1503 ¿qué otros tipos de espacios en blanco?
Ricardo
Los definidos en la categoría Zs: fileformat.info/info/unicode/category/Zs/list.htm
fpg1503
45

Swift 3

Simplemente puede usar este método para eliminar todos los espacios normales en una cadena (no considera todos los tipos de espacios en blanco):

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

El resultado será:

HelloWorld!
Mykyta Savchuk
fuente
1
Solo funciona para "" (no considera otros tipos de whitesapce)
fpg1503
@ Greg todavía te faltan otros 16 caracteres: fileformat.info/info/unicode/category/Zs/list.htm
fpg1503
18

También puedes usar regex.

let trimmedString = myString.stringByReplacingOccurrencesOfString("\\s", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: nil)
malhumorado
fuente
Swift 4: myString.replacingOccurrences (de: "\\ s", con: "", opciones: NSString.CompareOptions.regularExpression, rango: nil)
norbDEV
16

Para Swift 3.0+, vea las otras respuestas. Esta es ahora una respuesta heredada para Swift 2.x

Como se respondió anteriormente, dado que está interesado en eliminar el primer carácter, el método de instancia .stringByTrimmingCharactersInSet () funcionará bien:

myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

También puede crear sus propios conjuntos de caracteres para recortar los límites de sus cadenas, por ejemplo:

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

También hay un método de instancia incorporado para tratar de eliminar o reemplazar subcadenas llamado stringByReplacingOccurrencesOfString (target: String, replace: String) . Puede eliminar espacios o cualquier otro patrón que ocurra en cualquier parte de su cadena

Puede especificar opciones y rangos, pero no necesita:

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

Esta es una manera fácil de eliminar o reemplazar cualquier patrón repetitivo de caracteres en su cadena, y se puede encadenar, aunque cada vez que lo haga tiene que pasar de nuevo por toda su cadena, disminuyendo la eficiencia. Entonces puedes hacer esto:

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

... pero tomará el doble de tiempo.

.stringByReplacingOccurrencesOfString () documentación del sitio de Apple

Encadenar estos métodos de instancia de String a veces puede ser muy conveniente para conversiones únicas, por ejemplo, si desea convertir un blob NSData corto en una cadena hexadecimal sin espacios en una línea, puede hacerlo con la interpolación de String incorporada de Swift y algunos recortes y reemplazando:

("\(myNSDataBlob)").stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")).stringByReplacingOccurrencesOfString(" ", withString: "")
Agua no palabras
fuente
Solo funciona para "" (no considera otros tipos de whitesapce)
fpg1503
Todavía no considera otros tipos de espacios en blanco en el medio de la cadena
fpg1503
12

Para swift 3.0

import Foundation

var str = " Hear me calling"

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

str.stringByRemovingWhitespaces  // Hearmecalling
Dharmesh Kheni
fuente
8

Swift 4

El excelente caso para usar la expresión regular:

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

// thisiswrongcontainedteeext
dimpiax
fuente
7

Usaría esta extensión, para ser flexible e imitar cómo lo hacen otras colecciones:

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"
Jean-Philippe Pellet
fuente
Solo funciona para "" (no considera otros tipos de whitesapce)
fpg1503
6

Si desea eliminar espacios del frente (y la parte posterior) pero no del medio, debe usar stringByTrimmingCharactersInSet

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

Si desea eliminar espacios de cualquier parte de la cadena, puede que desee mirar stringByReplacing ...

Jeremy Pope
fuente
¿Cómo eliminar el espacio medio también?
Nikhil Gupta
@NikhilGupta no, solo al principio y al final (las " First Word "salidas de ejemplo "First Word").
fpg1503
6

Swift 4, 4.2 y 5

Elimine el espacio de la parte frontal y final solamente

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

Eliminar espacios de cada parte de la cadena

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

Puedes probar esto también

   let updatedString = searchedText?.stringByReplacingOccurrencesOfString(" ", withString: "-")
Avinash Mishra
fuente
Solo funciona para "" (no considera otros tipos de whitesapce)
fpg1503
3

Pruebe la programación funcional para eliminar espacios en blanco:

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

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

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

Si alguien elimina el espacio extra de la cadena, por ejemplo = "This is the demo text remove extra space between the words."

Puede usar esta función en 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
}

y el resultado será

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

Hola, esto puede ser tarde pero vale la pena intentarlo. Esto es de un archivo del patio de recreo. Puede convertirlo en una extensión de cadena.

Esto está escrito en Swift 5.3

Método 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       "

Método 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       "
Lexlab
fuente
Esto es para Swift 5.x
Kyle Emmanuel
¡Esto es genial! Gracias
RJ Uy
2

Versión 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)
        }
NemSothea
fuente
2

Recortar espacios en blanco en Swift 4

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

Otra respuesta más, a veces la cadena de entrada puede contener más de un espacio entre palabras. Si necesita estandarizar para tener solo 1 espacio entre palabras, intente esto (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 !"
Duyen-Hoa
fuente
1

Para mí, la siguiente línea solía eliminar espacios en blanco.

let result = String(yourString.filter {![" ", "\t", "\n"].contains($0)})
ssowri1
fuente
1
string = string.filter ({!" ".contains($0) })
Fahim Rahman
fuente
-1

Versión Swift 3 de la respuesta de 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: "")
    }
}
adougies
fuente
Solo funciona para "" (no considera otros tipos de whitesapce)
fpg1503
Porque tu respuesta es incorrecta. La respuesta a la que has proporcionado una actualización también es incorrecta. Hay varios tipos de espacios en blanco y es por eso que usar whitespaceCharacterSetes una mejor práctica.
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)
    }
}
Rakesh Vaniyen
fuente
-2

Para eliminar todos los espacios de la cadena:

let space_removed_string = (yourstring?.components(separatedBy: " ").joined(separator: ""))!
Ram Madhavan
fuente