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.