¿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.


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)

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

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.

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!

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)

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

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

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

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"

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 ...


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

3

Puedes probar esto también

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

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

3
extension String {

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

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

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."

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       "

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

2

Recortar espacios en blanco en Swift 4

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

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 !"

1

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

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


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

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

-2

Para eliminar todos los espacios de la cadena:

let space_removed_string = (yourstring?.components(separatedBy: " ").joined(separator: ""))!
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.