Como devo remover todos os espaços à esquerda de uma string? - rápido

170

Eu preciso de uma maneira de remover o primeiro caractere de uma seqüência de caracteres que é um espaço. Estou procurando um método ou mesmo uma extensão para o tipo String que eu possa usar para cortar um caractere de uma string.

dhruvm
fonte
8
Deseja remover o primeiro caractere de espaço ou todos os caracteres de espaço na sequência?
21415 Alex

Respostas:

380

Para remover os espaços em branco iniciais e finais:

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

Swift 3 / Swift 4:

let trimmedString = string.trimmingCharacters(in: .whitespaces)
Alex
fonte
180
isso funcionará apenas para espaços em branco iniciais e finais. isso não removerá os espaços em branco contidos na string.
dom
87
Se você quiser remover todos os espaços em branco que você pode tentar myString.stringByReplacingOccurrencesOfString ("", withString: "")
Lucas
6
Você também pode usar NSCharacterSet.whitespaceAndNewlineCharacterSet()se desejar aparar caracteres de nova linha.
Blip
2
Para fazê-lo funcionar com Swift 3.0 e também remover os espaços em branco no meio de cordas, resposta uso: stackoverflow.com/a/39067610/4886069
2
Usuário do Swift 3+: yourString.replacingOccurrences (of: "", with: "")
Nadeesha Lakmal 8/17/17
144

A maneira correta quando você deseja remover todos os tipos de espaços em branco (com base nesta resposta do SO ) é:

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 resposta foi publicada quando a pergunta era sobre a remoção de todos os espaços em branco. A pergunta foi editada para mencionar apenas os espaços em branco à esquerda. Se você deseja remover apenas os espaços em branco à esquerda, use o seguinte:

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
fonte
5
Também .components (separatedBy: .whitespacesAndNewlines) para novas linhas também
Derek
Isso deve ser uma função, não uma var
Jakub Truhlář
1
Por causa da lógica do recurso . Você está criando uma propriedade calculada quando deve criar uma função . Ele está fazendo smt em vez de manter um valor ou calculá-lo a partir de outro. Veja: stackoverflow.com/questions/24035276/…
Jakub Truhlář
4
@ JakubTruhlář - Isso é uma questão de opinião, não uma declaração de fato. Veja softwareengineering.stackexchange.com/questions/304077/…
Ashley Mills
1
@ JakubTruhlář Você diz "Isso deve ser uma função, não uma var" - isso soa muito como se você estivesse declarando um fato, não sua opinião. Se você ler as respostas para a pergunta vinculada, verá que, embora "faça sentido" para você, para outras pessoas ... não necessariamente.
Ashley Mills
82

Essa extensão String remove todo o espaço em branco de uma string, não apenas o espaço em branco à direita ...

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

Exemplo:

let string = "The quick brown dog jumps over the foxy lady."
let result = string.removeWhitespace() // Thequickbrowndogjumpsoverthefoxylady.
BadmintonCat
fonte
4
Só funciona para "" (não considera outros tipos de whitesapce)
fpg1503
@ fpg1503 que outros tipos de espaço em branco?
Ricardo
Os definidos na categoria Zs: fileformat.info/info/unicode/category/Zs/list.htm
fpg1503
45

Swift 3

Você pode simplesmente usar esse método para remover todos os espaços normais em uma string (não considera todos os tipos de espaço em branco):

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

O resultado será:

HelloWorld!
Mykyta Savchuk
fonte
1
Funciona apenas para "" (não considera outros tipos de whitesapce)
fpg1503 31/10/16
@Greg ainda falta 16 outros caracteres: fileformat.info/info/unicode/category/Zs/list.htm
fpg1503
18

Você também pode usar regex.

let trimmedString = myString.stringByReplacingOccurrencesOfString("\\s", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: nil)
mohonish
fonte
Swift 4: myString.replacingOccurrences (of: "\\ s", with: "", options: NSString.CompareOptions.regularExpression, range: nil)
norbDEV
16

Para o Swift 3.0+, consulte as outras respostas. Esta é agora uma resposta herdada para o Swift 2.x

Como respondido acima, como você está interessado em remover o primeiro caractere, o método de instância .stringByTrimmingCharactersInSet () funcionará bem:

myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

Você também pode criar seus próprios conjuntos de caracteres para aparar os limites de suas cordas, ex:

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

Também existe um método de instância integrado para lidar com a remoção ou substituição de substrings chamados stringByReplacingOccurrencesOfString (target: String, substituição: String) . Ele pode remover espaços ou quaisquer outros padrões que ocorram em qualquer lugar da sua string

Você pode especificar opções e intervalos, mas não precisa:

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

Essa é uma maneira fácil de remover ou substituir qualquer padrão repetido de caracteres em sua string e pode ser encadeada, embora cada vez que ela tenha que passar por outra passagem por toda a string, diminuindo a eficiência. Então você pode fazer isso:

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

... mas levará o dobro do tempo.

.stringByReplacingOccurrencesOfString () documentação do site da Apple

Às vezes, encadear esses métodos de instância String pode ser muito conveniente para conversões únicas, por exemplo, se você deseja converter um blob NSData curto em uma string hexadecimal sem espaços em uma linha, é possível fazer isso com a interpolação String incorporada do Swift e alguns ajustes e substituindo:

("\(myNSDataBlob)").stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")).stringByReplacingOccurrencesOfString(" ", withString: "")
Água Não Palavras
fonte
Só funciona para "" (não considera outros tipos de whitesapce)
fpg1503
Ele ainda não considera outros tipos de espaço em branco no meio da corda
fpg1503
12

For 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
fonte
8

Swift 4

O excelente caso para usar a regex:

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

// thisiswrongcontainedteeext
dimpiax
fonte
7

Eu usaria essa extensão para ser flexível e imitar como outras coleções fazem isso:

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
fonte
Funciona apenas para "" (não considera outros tipos de whitesapce)
fpg1503 21/08
6

Se você deseja remover espaços da frente (e de trás), mas não do meio, use stringByTrimmingCharactersInSet

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

Se você deseja remover espaços de qualquer lugar da string, consulte stringByReplacing ...

Jeremy Pope
fonte
Como remover o espaço do meio também?
Nikhil Gupta
@NikhilGupta não, apenas à esquerda e à esquerda (o exemplo " First Word "gera "First Word").
fpg1503
6

Swift 4, 4.2 e 5

Remova espaço apenas da frente e do fim

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

Remova espaços de todos os lugares da cadeia

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

Você pode tentar isso também

   let updatedString = searchedText?.stringByReplacingOccurrencesOfString(" ", withString: "-")
Avinash Mishra
fonte
Funciona apenas para "" (não considera outros tipos de whitesapce)
fpg1503 21/08
3

Experimente a programação funcional para remover os espaços em branco:

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

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

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

Se alguém remover espaço extra da string, por exemplo, = "This is the demo text remove extra space between the words."

Você pode usar esta função no 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
}

e o resultado será

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

Oi, isso pode ser tarde, mas vale a pena tentar. Isso é de um arquivo de playground. Você pode torná-lo uma extensão String.

Isso está escrito no 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
fonte
Isso é para o Swift 5.x
Kyle Emmanuel
Isso é ótimo! Obrigado
RJ Uy
2

Versão 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
fonte
2

Aparar espaços em branco no Swift 4

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

Ainda outra resposta, às vezes a sequência de entrada pode conter mais de um espaço entre as palavras. Se você precisar padronizar para ter apenas 1 espaço entre as palavras, tente isso (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
fonte
1

Para mim, a seguinte linha costumava remover o espaço em branco.

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

Versão Swift 3 da resposta do 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
fonte
Funciona apenas para "" (não considera outros tipos de whitesapce)
fpg1503 21/08
Porque sua resposta está errada. A resposta para a qual você forneceu uma atualização também está errada. Existem vários tipos de espaços em branco e é por isso que usar whitespaceCharacterSeté uma prática recomendada.
precisa saber é o seguinte
-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
fonte
-2

Para remover todos os espaços da sequência:

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