Jak usunąć wszystkie początkowe spacje z ciągu? - szybki


Odpowiedzi:


380

Aby usunąć wiodące i końcowe spacje:

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

Swift 3 / Swift 4:

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

180
będzie to działać tylko dla początkowych i końcowych białych znaków. nie usunie to białych znaków zawartych w łańcuchu.
niedziela

87
jeśli chcesz usunąć wszystkie spacje, możesz spróbować myString.stringByReplacingOccurrencesOfString ("", withString: "")
Lucas

6
Możesz również użyć, NSCharacterSet.whitespaceAndNewlineCharacterSet()jeśli chcesz również przyciąć znaki nowej linii.
Blip

2
Aby działał ze Swift 3.0, a także usuwał spacje między ciągami, użyj odpowiedzi: stackoverflow.com/a/39067610/4886069

2
Użytkownik Swift 3+: yourString.replacingOccurrences (z: "", z: "")
Nadeesha Lakmal

144

Prawidłowy sposób usuwania wszystkich rodzajów białych znaków (w oparciu o tę odpowiedź SO ) to:

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

EDYTOWAĆ

Ta odpowiedź została opublikowana, gdy pytanie dotyczyło usunięcia wszystkich białych znaków, pytanie zostało zmienione, aby wspomnieć tylko o wiodących białych znakach. Jeśli chcesz usunąć tylko wiodące spacje, użyj następujących poleceń:

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
także .components (SeparatedBy: .whitespacesAndNewlines) również dla nowych linii
Derek

To powinno być func, a nie var
Jakub Truhlář

1
Ze względu na logikę funkcji . Tworzysz obliczoną właściwość, kiedy powinieneś utworzyć funkcję . Robi coś, a nie trzyma wartość lub oblicza ją na podstawie innej. Zobacz: stackoverflow.com/questions/24035276/…
Jakub Truhlář

4
@ JakubTruhlář - To kwestia opinii, a nie stwierdzenia faktu. Zobacz softwareengineering.stackexchange.com/questions/304077/…
Ashley Mills

1
@ JakubTruhlář Mówisz "To powinno być func, a nie var" - to brzmi tak, jakbyś stwierdzał fakt, a nie swoją opinię. Jeśli przeczytasz odpowiedzi na powiązane pytanie, zobaczysz, że chociaż „ma to sens” dla Ciebie, dla innych osób… niekoniecznie.
Ashley Mills

82

To rozszerzenie typu String usuwa wszystkie białe znaki z ciągu, a nie tylko końcowe spacje ...

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

Przykład:

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

4
Działa tylko dla „” (nie uwzględnia innych rodzajów whitesapce)
fpg1503

@ fpg1503 jakie inne rodzaje białych znaków?
Ricardo

Te zdefiniowane w kategorii Zs: fileformat.info/info/unicode/category/Zs/list.htm
fpg1503

45

Szybki 3

Możesz po prostu użyć tej metody, aby usunąć wszystkie normalne spacje w ciągu (nie uwzględnia wszystkich typów białych znaków):

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

Rezultatem będzie:

HelloWorld!

1
Działa tylko dla „” (nie uwzględnia innych rodzajów whitesapce)
fpg1503

@Greg nadal brakuje 16 innych znaków: fileformat.info/info/unicode/category/Zs/list.htm
fpg1503

18

Możesz też użyć wyrażenia regularnego.

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

Swift 4: myString.replacingOccurrences (of: "\\ s", with: "", options: NSString.CompareOptions.regularExpression, range: nil)
norbDEV

16

W przypadku Swift 3.0+ zobacz inne odpowiedzi. To jest teraz starsza odpowiedź dla Swift 2.x

Zgodnie z powyższą odpowiedzią, ponieważ jesteś zainteresowany usunięciem pierwszego znaku, metoda instancji .stringByTrimmingCharactersInSet () będzie dobrze działać:

myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

Możesz także tworzyć własne zestawy znaków, aby przycinać granice swoich ciągów, np .:

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

Istnieje również wbudowana metoda instancji, która radzi sobie z usuwaniem lub zastępowaniem podciągów o nazwie stringByReplacingOccurrencesOfString (target: String, replace: String) . Może usuwać spacje lub inne wzorce, które występują w dowolnym miejscu w ciągu

Możesz określić opcje i zakresy, ale nie musisz:

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

Jest to łatwy sposób na usunięcie lub zamianę dowolnego powtarzającego się wzoru znaków w ciągu i można go połączyć, chociaż za każdym razem musi przejść przez cały ciąg, zmniejszając wydajność. Więc możesz to zrobić:

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

... ale potrwa to dwa razy dłużej.

.stringByReplacingOccurrencesOfString () dokumentacja z witryny Apple

Tworzenie łańcuchów tych metod instancji typu String może być czasami bardzo wygodne w przypadku jednorazowych konwersji, na przykład, jeśli chcesz przekonwertować krótki obiekt BLOB NSData na ciąg szesnastkowy bez spacji w jednej linii, możesz to zrobić za pomocą wbudowanej interpolacji ciągów języka Swift oraz przycinania i wymiana:

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

Działa tylko dla „” (nie uwzględnia innych rodzajów whitesapce)
fpg1503

Wciąż nie bierze pod uwagę innych rodzajów białych znaków w środku łańcucha
fpg1503

12

Dla Swift 3.0

import Foundation

var str = " Hear me calling"

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

str.stringByRemovingWhitespaces  // Hearmecalling

8

Szybki 4

Doskonały przypadek użycia wyrażenia regularnego:

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

// thisiswrongcontainedteeext

7

Użyłbym tego rozszerzenia, aby być elastycznym i naśladować sposób, w jaki robią to inne kolekcje:

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"

Działa tylko dla „” (nie uwzględnia innych rodzajów whitesapce)
fpg1503

6

Jeśli chcesz usunąć spacje z przodu (iz tyłu), ale nie ze środka, użyj stringByTrimmingCharactersInSet

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

Jeśli chcesz usunąć spacje z dowolnego miejsca w ciągu, możesz spojrzeć na stringByReplacing ...


Jak usunąć również środkową przestrzeń?
Nikhil Gupta

@NikhilGupta no, tylko początek i koniec (przykładowe dane " First Word "wyjściowe "First Word").
fpg1503

6

Swift 4, 4,2 i 5

Usuń przestrzeń tylko z przodu i z końca

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

Usuń spacje z każdego miejsca w ciągu

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

3

Możesz też tego spróbować

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

Działa tylko dla „” (nie uwzględnia innych rodzajów whitesapce)
fpg1503

3

Wypróbuj programowanie funkcjonalne, aby usunąć spacje:

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

Jeśli ktoś usunie dodatkową spację ze stringa np. = "This is the demo text remove extra space between the words."

Możesz użyć tej funkcji w 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
}

a wynik będzie

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

3

Cześć, to może być późno, ale warto spróbować. To pochodzi z pliku placu zabaw. Możesz uczynić z niego rozszerzenie typu String.

Jest to napisane w języku Swift 5.3

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

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

To jest dla Swift 5.x
Kyle Emmanuel

To jest świetne! Dzięki
RJ Uy

2

Wersja 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

Przycinanie białych spacji w Swift 4

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

2

Jeszcze inna odpowiedź, czasami ciąg wejściowy może zawierać więcej niż jedną spację między słowami. Jeśli chcesz ustandaryzować, aby między słowami było tylko 1 odstęp, spróbuj tego (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

U mnie następująca linia służyła do usuwania białych znaków.

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


-1

Wersja Swift 3 odpowiedzi 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: "")
    }
}

Działa tylko dla „” (nie uwzględnia innych rodzajów whitesapce)
fpg1503

Ponieważ twoja odpowiedź jest błędna. Odpowiedź, którą podałeś aktualizację, również jest błędna. Istnieje kilka rodzajów białych znaków i dlatego whitespaceCharacterSetnajlepiej jest ich używać.
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

Aby usunąć wszystkie spacje z ciągu:

let space_removed_string = (yourstring?.components(separatedBy: " ").joined(separator: ""))!
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.