O swift tem um método de aparar no String?

393

O swift tem um método de aparar no String? Por exemplo:

let result = " abc ".trim()
// result == "abc"
tounaobun
fonte
4
guarnição @mattdipasquale é um nome muito comum para esta operação
Austin

Respostas:

831

Veja como você remove todo o espaço em branco do início e do final de um String.

(Exemplo testado com 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"

(Exemplo testado com 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"

Espero que isto ajude.

Sivanraj M
fonte
Não funcionará no swif 1.2, pois não há convenção automática de String para NSString.
Elcuco 18/06/2015
5
Ele funciona muito bem em Swift 1.2 - o objeto String tem método stringByTrimmingCharactersInSet (não é um exclusivo NSString)
Ben Dodson
8
Em Swift 3.0 é: deixar trimmedString = myString.trimmingCharacters (em: .whitespaces)
kikettas
6
Isso não significa que está desatualizado. Nem todo mundo está usando o Swift 3.0 ainda.
usar o seguinte código
2
No Swift 3.0, isso não remove espaços em branco entre as strings. Ele remove apenas os espaços em branco iniciais e finais. Para isso, consulte esta resposta: stackoverflow.com/a/39067610/4886069 #
130

Coloque esse código em um arquivo no seu projeto, algo como Utils.swift:

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

Então você será capaz de fazer isso:

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

Solução Swift 3.0

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

Então você será capaz de fazer isso:

let result = " Hello World ".trim()
// result = "HelloWorld"
Thiago Arreguy
fonte
2
Isso é seguro? Como impedir uma colisão de nome de método se a Apple ou alguma biblioteca de terceiros adicionar o mesmo método String?
ma11hew28
12
As extensões são seguras - e, de fato, a Apple faz um uso prolífico delas em suas APIs internas. Você não pode impedir colisões de nomes, e isso é realmente bom. Você receberá um erro de compilação quando a Apple finalmente adicionar um método trim () e saberá que sua extensão não é mais necessária. As extensões são bastante elegantes e colocam métodos onde você precisa delas, em vez de alguma classe de utilidade obscura, como StringUtils - o problema que tenho é quando uma classe não possui um método de que preciso porque alguma outra estrutura não foi importada que adicionou extensões a ela.
absmiths
3
Ei, no Swift 3 deve retornarreturn self.trimmingCharacters(in: .whitespacesAndNewlines)
7
let result = "Hello World" .trim () // result = "HelloWorld" isso não removerá os espaços em branco contidos na string. removerá apenas espaços iniciais e finais.
Sahil
2
isso não removerá espaços entre as strings. Ele remove apenas o espaço inicial e final. Então é melhor maneira de remover espaços entre cordas é o uso yourtext .replacingOccurrences (de: "", com: "") em vez de usar trimmingCharacters?
Umesh Sawant
57

No Swift 3.0

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

E você pode ligar

let result = " Hello World ".trim()  /* result = "Hello World" */
Bishow Gurung
fonte
4
E se eu quiser apenas aparar os espaços em branco à esquerda e à direita?
Suragch
11
Eu sou novo em 3 extensões rápidas. Se uma biblioteca modifica String, e eu também modifico String, é possível obter colisões? E se futuras versões do swift ad um método trim ()? Então .. basicamente .. as extensões são seguras para usar assim?
Gattster 14/10/16
11
é possível obter colisões.
Alex Brown
let result = "Hello World" .trim () // result = "HelloWorld" isso não removerá os espaços em branco contidos na string. vai Remve única esquerda e à direita espaços
Sahil
45

Swift 5 e 4.2

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

Swift 3

let result = " abc ".trimmingCharacters(in: .whitespacesAndNewlines)
Warif Akhand Rishi
fonte
@LucasFarah vê evolução rápida
Warif Akhand Rishi
Data prevista de lançamento: Tarde 2016
Warif Akhand Rishi
11
Na verdade, são "espaços em branco e linhas novas", haha, resta um.
RainCast 19/10/16
9

Sim, você pode fazer assim:

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

CharacterSet é realmente uma ferramenta realmente poderosa para criar uma regra de corte com muito mais flexibilidade do que um conjunto predefinido como .whitespacesAndNewlines.

Por exemplo:

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

Truncar seqüência de caracteres para comprimento específico

Se você inseriu o bloco de frase / texto e deseja salvar apenas o comprimento especificado desse texto. Adicione a seguinte extensão à 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)
   }

}

Usar

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
fonte
5

Você pode usar o método trim () em uma extensão Swift String que escrevi https://bit.ly/JString .

var string = "hello  "
var trimmed = string.trim()
println(trimmed)// "hello"
William Falcon
fonte
Parece legal. Eu vou usar isso.
Philipp
5

Outra maneira semelhante:

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

Usar:

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

Retirado deste repo meu: https://github.com/goktugyil/EZSwiftExtensions/commit/609fce34a41f98733f97dfd7b4c23b5d16416206

Esqarrouth
fonte
Eu gosto do verbo rápido e compatível para não sofrer mutações.
Alex Brown
4

No Swift3 XCode 8 Final

Observe que a CharacterSet.whitespacesfunção não é mais!

(Nem é NSCharacterSet.whitespaces)

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

// Swift 4.0 Remover espaços e novas linhas

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

Você também pode enviar caracteres que deseja cortar

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
fonte
0

Eu criei esta função que permite inserir uma string e retorna uma lista de string aparada por qualquer caractere

 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

}

como não encontrou uma maneira de fazer isso no swift (compila e funciona perfeitamente no swift 2.0)

Yeis Gallegos
fonte
2
você pode definir o que você quer dizer com 'aparar', com um exemplo. Como seu tipo de retorno é [String], você não pode implementar o que o OP solicitou. (que retorna um String)
Alex Brown
0

Não esqueça de import Foundationou UIKit.

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

Resultado:

"aaa"

Caso contrário, você receberá:

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