Bir dizedeki tüm önde gelen boşlukları nasıl kaldırmalıyım? - hızlı


Yanıtlar:


380

Ön ve arka boşlukları kaldırmak için:

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

Hızlı 3 / Hızlı 4:

let trimmedString = string.trimmingCharacters(in: .whitespaces)

180
bu yalnızca önde gelen ve arkadaki boşluklarda işe yarar. bu dize içindeki boşlukları kaldırmaz.
güneş

87
tüm boş alanları kaldırmak istiyorsanız myString.stringByReplacingOccurrencesOfString ("", withString: "") ile deneyebilirsiniz
Lucas

6
Yeni NSCharacterSet.whitespaceAndNewlineCharacterSet()satır karakterlerini de kırpmak istiyorsanız da kullanabilirsiniz .
Blip

2
Swift 3.0 ile çalışmasını sağlamak ve ayrıca dize arasındaki beyaz boşlukları kaldırmak için answer: stackoverflow.com/a/39067610/4886069

2
Swift 3+ kullanıcı: yourString.replacingOccurrences (arasında: "" ile: "")
Nadeesha Lakmal

144

Her türlü beyaz alanı ( bu SO cevabına dayanarak) kaldırmak istediğinizde doğru yol :

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

DÜZENLE

Bu cevap, tüm boşlukların kaldırılmasıyla ilgili olduğunda, sadece önde gelen boşluklardan bahsetmek üzere düzenlendi. Yalnızca önde gelen boşlukları kaldırmak istiyorsanız aşağıdakileri kullanın:

extension String {
    func removingLeadingSpaces() -> String {
        guard let index = firstIndex(where: { !CharacterSet(charactersIn: String($0)).isSubset(of: .whitespaces) }) else {
            return self
        }
        return String(self[index...])
    }
}

5
ayrıca .components (separaBy: .whitespacesAndNewlines) yeni satırlar için de
Derek

Bu fonk değil bir var olmalıdır
Jakub Truhlář

1
Çünkü özelliğin mantığı . Bir yapıyoruz hesaplanmış özelliği bir yapmalıdır işlevi . Bir değeri tutmak veya başka bir değerden hesaplamak yerine smt yapıyor.
Şuraya

4
@ JakubTruhlář - Bu bir fikir meselesi, gerçek bir ifade değil. Bkz. Softwareengineering.stackexchange.com/questions/304077/…
Ashley Mills

1
@ JakubTruhlář "Bu bir değişken değil bir fon olmalı" diyorsunuz - bu sizin fikrinizi değil, bir gerçeği belirttiğiniz gibi görünüyor. Bağlantılı sorunun cevaplarını okursanız, bunun sizin için, diğer insanlara "mantıklı" olmasına rağmen, mutlaka değil.
Ashley Mills

82

Bu String uzantısı, yalnızca boşluktan değil, tüm boşlukları bir dizeden kaldırır ...

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

Misal:

let string = "The quick brown dog jumps over the foxy lady."
let result = string.removeWhitespace() // Thequickbrowndogjumpsoverthefoxylady.

4
Sadece "" için çalışır (diğer tür beyazları dikkate almaz)
fpg1503

@ fpg1503 başka hangi tür beyaz alanlar?
Ricardo

Zs kategorisinde tanımlananlar:
fileformat.info/info/unicode/category/Zs/list.htm

45

Hızlı 3

Bir dizedeki tüm normal boşlukları kaldırmak için bu yöntemi kullanabilirsiniz (tüm boşluk türlerini dikkate almaz):

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

Sonuç:

HelloWorld!

1
Sadece "" için çalışıyor (diğer tür beyazları dikkate almıyor)
fpg1503

: @Greg hala 16 diğer karakterler kaçırıyorsun fileformat.info/info/unicode/category/Zs/list.htm
fpg1503

18

Normal ifade de kullanabilirsiniz.

let trimmedString = myString.stringByReplacingOccurrencesOfString("\\s", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: nil)

Swift 4: myString.replacingOccurrences (/: "\\ s" ile: "", seçenekler: NSString.CompareOptions.regularExpression, aralık: nil)
norbDEV

16

Swift 3.0+ için diğer cevaplara bakın. Bu artık Swift 2.x için eski bir cevap

Yukarıda yanıtlandığı gibi, ilk karakteri kaldırmakla ilgilendiğiniz için .stringByTrimmingCharactersInSet () örneği yöntemi iyi çalışır:

myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

Dizelerinizin sınırlarını şu şekilde kırpmak için kendi karakter setlerinizi de yapabilirsiniz:

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

StringByReplacingOccurrencesOfString (target: String, replacement: String) adlı alt dizelerin kaldırılması veya değiştirilmesiyle ilgili yerleşik bir örnek yöntemi de vardır . Dizenizde herhangi bir yerde oluşan boşlukları veya diğer kalıpları kaldırabilir

Seçenekleri ve aralıkları belirtebilirsiniz, ancak şunları yapmanız gerekmez:

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

Bu, dizenizdeki yinelenen karakter desenlerini kaldırmanın veya değiştirmenin kolay bir yoludur ve zincirleme yapılabilir, ancak her seferinde tüm dizeden başka bir geçiş yapmak zorunda kalır ve verimliliği azaltır. Böylece bunu yapabilirsiniz:

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

... ama iki kat daha uzun sürecek.

Apple sitesinden .stringByReplacingOccurrencesOfString () belgeleri

Bu String örneği yöntemlerini zincirlemek bazen bir kerelik dönüşümler için çok uygun olabilir, örneğin kısa bir NSData blobunu bir satırda boşluk olmadan onaltılık bir dizeye dönüştürmek isterseniz, Swift'in yerleşik String enterpolasyonu ve bazı kırpma ile yapabilirsiniz ve değiştirilmesi:

("\(myNSDataBlob)").stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")).stringByReplacingOccurrencesOfString(" ", withString: "")

Sadece "" için çalışır (diğer tür beyazları dikkate almaz)
fpg1503

Hala
ipin

12

İçin Swift 3.0

import Foundation

var str = " Hear me calling"

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

str.stringByRemovingWhitespaces  // Hearmecalling

8

Hızlı 4

Normal ifadeyi kullanmak için mükemmel durum:

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

// thisiswrongcontainedteeext

7

Esnek ve diğer koleksiyonların nasıl yaptığını taklit etmek için bu uzantıyı kullanırdım:

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"

Sadece "" için çalışıyor (diğer tür beyazları dikkate almıyor)
fpg1503

6

Boşlukları önden (ve arkadan) kaldırmak, ancak ortadan kaldırmak istemiyorsanız, stringByTrimmingCharactersInSet

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

Dizenin herhangi bir yerindeki boşlukları kaldırmak istiyorsanız, stringByReplacing ... öğesine bakmak isteyebilirsiniz.


Orta alan da nasıl kaldırılır?
Nikhil Gupta

@NikhilGupta hayır, sadece önde gelen ve takip eden (örnek " First Word "çıktılar "First Word").
fpg1503

6

Swift 4, 4.2 ve 5

Yalnızca önden ve sondan alanı kaldırın

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

Dizenin her yerindeki boşlukları kaldırın

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

3

Bunu da deneyebilirsiniz

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

Sadece "" için çalışıyor (diğer tür beyazları dikkate almıyor)
fpg1503

3

Beyaz boşlukları kaldırmak için fonksiyonel programlamayı deneyin:

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

Herhangi biri dizeden fazladan boşluk kaldırırsa, örneğin = "This is the demo text remove extra space between the words."

Bu işlevi Swift 4'te kullanabilirsiniz.

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
}

ve sonuç olacak

"This is the demo text remove extra space between the words."

3

Merhaba bu geç olabilir ama denemeye değer. Bu bir oyun dosyasýndan. Bir String uzantısı yapabilirsiniz.

Bu Swift 5.3 ile yazılmıştır

Yöntem 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       "

Yöntem 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       "

Bu Swift 5.x için
Kyle Emmanuel

Bu harika! Teşekkürler
RJ Uy

2

Swift 3 sürümü

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

Beyaz boşlukların kırpılması in Swift 4

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

2

Yine başka bir cevap, bazen giriş dizesi kelimeler arasında birden fazla boşluk içerebilir. Sözcükler arasında yalnızca 1 boşluk olacak şekilde standartlaştırmanız gerekiyorsa, bunu deneyin (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

Benim için, aşağıdaki satır beyaz boşluğu kaldırmak için kullanılır.

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


-1

BadmintonCat'ın cevabının Swift 3 versiyonu

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

Sadece "" için çalışıyor (diğer tür beyazları dikkate almıyor)
fpg1503

Çünkü cevabınız yanlış. Bir güncelleme sağladığınız cevap da yanlış. Birkaç çeşit beyaz alan vardır ve bu yüzden kullanmak whitespaceCharacterSeten iyi uygulamadır.
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

Dizeden tüm boşlukları kaldırmak için:

let space_removed_string = (yourstring?.components(separatedBy: " ").joined(separator: ""))!
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.