Swift'te String üzerinde bir kırpma yöntemi var mı?


393

Swift'te String üzerinde bir kırpma yöntemi var mı? Örneğin:

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

4
@mattdipasquale trim bu işlem için çok yaygın bir isim
Austin

Yanıtlar:


831

Tüm beyaz alanı a'nın başından ve sonundan nasıl kaldıracağınız aşağıda açıklanmıştır String.

(Örnek Swift 2.0 ile test edilmiştir .)

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"

(Örnek Swift 3+ ile test edilmiştir .)

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"

Bu yardımcı olur umarım.


String'den NSString'e otomatik bir kural olmadığından swif 1.2'de çalışmaz.
elcuco

5
Swift 1.2'de iyi çalışıyor - String nesnesinin stringByTrimmingCharactersInSet yöntemi var (bir NSString özel değil)
Ben Dodson

8
Swift 3.0 içinde: let trimmedString = myString.trimmingCharacters (içinde: .whitespaces)
kikettas

6
Bu eski olduğu anlamına gelmez. Herkes henüz Swift 3.0 kullanmıyor.
c.dunlap

2
Swift 3.0'da bu, dize arasındaki beyaz boşlukları kaldırmaz. Yalnızca önde gelen ve arkadaki boşlukları kaldıracaktır. Bunun için şu cevaba bakınız: stackoverflow.com/a/39067610/4886069

130

Bu kodu projenizdeki bir dosyaya koyun, Utils.swift gibi bir şey:

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

Böylece bunu yapabileceksiniz:

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

Swift 3.0 Çözümü

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

Böylece bunu yapabileceksiniz:

let result = " Hello World ".trim()
// result = "HelloWorld"

2
Bu güvenli mi? Apple veya bazı üçüncü taraf kitaplıkları aynı yöntemi eklerse yöntem adı çakışmasını nasıl önleyebilirim String?
20.11.2015

12
Uzantılar güvenlidir ve aslında Apple bunları dahili API'larında verimli bir şekilde kullanır. Herhangi bir isim çarpışmasını önleyemezsiniz ve bu aslında iyidir. Apple nihayet bir trim () yöntemi eklediğinde derleme hatası alırsınız ve uzantınızın artık gerekli olmadığını bilirsiniz. Uzantılar oldukça zarif ve StringUtils gibi bazı belirsiz yarar sınıf yerine onlara ihtiyacınız olan yöntemleri koymak - benim sorunum, bir sınıfın eklentileri ekledi başka bir çerçeve ithal değildi çünkü ihtiyacım bir yöntemi yok.
Absmiths

3
Hey, Swift 3'te iade edilmelidirreturn self.trimmingCharacters(in: .whitespacesAndNewlines)

7
let sonuç = "Merhaba Dünya" .trim () // sonuç = "HelloWorld", dizede yer alan boşlukları kaldırmaz. yalnızca önde gelen ve arkadaki alanları kaldıracaktır.
Sahil

2
bu dize arasındaki boşlukları kaldırmaz. Sadece ön ve arka boşlukları kaldırır. Yani iyi bir yol dizesi kullanımı yourtext olduğu aradaki boşlukları kaldırmak için .replacingOccurrences (arasında: "", ile: "") yerine trimmingCharacters kullanmanın?
Umesh Sawant

57

Swift 3.0'da

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

Ve arayabilirsin

let result = " Hello World ".trim()  /* result = "Hello World" */

4
Yalnızca sondaki ve önde gelen boşlukları kırpmak istersem ne olur?
Suragch

1
3 uzantıyı hızlı değiştirme konusunda yeniyim. Bir kitaplık Dize'yi değiştirirse ve ben de Dize'yi değiştirirsem, çarpışmalar elde etmek mümkün mü? Hızlı reklamın bir trim () yönteminin gelecekteki sürümleri ne olacak? Yani .. temel olarak .. uzantıları böyle kullanmak güvenli midir?
Gattster

1
çarpışmalar olabilir.
Alex Brown

let sonuç = "Merhaba Dünya" .trim () // sonuç = "HelloWorld", dizede yer alan boşlukları kaldırmaz. sadece önde gelen ve sondaki alanları kaldıracak
Sahil

45

Swift 5 ve 4.2

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


9

Evet, böyle yapabilirsiniz:

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

CharacterSet aslında .whitespacesAndNewlines gibi önceden tanımlanmış bir kümeden çok daha fazla esnekliğe sahip bir kırpma kuralı oluşturmak için gerçekten güçlü bir araçtır.

Örneğin:

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

6

Dizeyi Belirli Uzunluğa Kes

Cümle / metin bloğu girdiyseniz ve metnin dışında yalnızca belirtilen uzunluğu kaydetmek istiyorsanız. Class'a aşağıdaki uzantıyı ekleyin

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

}

kullanım

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 


5

Başka bir benzer yol:

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

kullanın:

let trimmedString = "myString ".trimmed

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

Benim bu repodan alındı: https://github.com/goktugyil/EZSwiftExtensions/commit/609fce34a41f98733f97dfd7b4c23b5d16416206


Mutasyona uğramaması için hızlı uyumlu fiili seviyorum.
Alex Brown

4

Swift3 XCode 8 Finalinde

CharacterSet.whitespacesArtık bir işlev olmadığına dikkat edin !

(İkisi de değil NSCharacterSet.whitespaces)

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

3

// Swift 4.0 Boşlukları ve yeni satırları kaldırma

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

2

Ayrıca kırpılmasını istediğiniz karakterleri de gönderebilirsiniz

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

0

Bir dize girmenize izin veren ve herhangi bir karakter tarafından kesilen dize listesini döndüren bu işlevi oluşturdum

 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

}

çünkü bunu hızlı bir şekilde yapmanın bir yolunu bulamadık (hızlı 2.0'da derler ve mükemmel çalışır)


2
ne demek istediğinizi 'kırparak' tanımlayabilirsiniz. Dönüş türünüz [String] olduğundan OP'nin istediği şeyi uygulayamazsınız. (Bu bir String döndürür)
Alex Brown

0

import FoundationVeya unutmayın UIKit.

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

Sonuç:

"aaa"

Aksi takdirde şunları elde edersiniz:

error: value of type 'String' has no member 'trimmingCharacters'
    return self.trimmingCharacters(in: .whitespaces)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.