Jak usunąć wszystkie początkowe spacje z ciągu? - szybki
170
Potrzebuję sposobu na usunięcie pierwszego znaku z łańcucha, którym jest spacja. Szukam metody lub nawet rozszerzenia dla typu String, którego mogę użyć do wycięcia znaku ciągu.
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ń:
extensionString{func removingLeadingSpaces()->String{guardlet index = firstIndex(where:{!CharacterSet(charactersIn:String($0)).isSubset(of:.whitespaces)})else{returnself}returnString(self[index...])}}
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/…
@ 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 ...
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ć:
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
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ć:
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:
Użyłbym tego rozszerzenia, aby być elastycznym i naśladować sposób, w jaki robią to inne kolekcje:
extensionString{func filter(pred:Character->Bool)->String{var res =String()for c inself.characters {if pred(c){
res.append(c)}}return res
}}"this is a String".filter { $0!=Character(" ")}//"thisisaString"
//This function trim only white space:
func trim()->String{returnself.trimmingCharacters(in:CharacterSet.whitespaces)}//This function trim whitespeaces and new line that you enter:
func trimWhiteSpaceAndNewLine()->String{returnself.trimmingCharacters(in:CharacterSet.whitespacesAndNewlines)}
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 !"
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ć.
Odpowiedzi:
Aby usunąć wiodące i końcowe spacje:
Swift 3 / Swift 4:
źródło
NSCharacterSet.whitespaceAndNewlineCharacterSet()
jeśli chcesz również przyciąć znaki nowej linii.Prawidłowy sposób usuwania wszystkich rodzajów białych znaków (w oparciu o tę odpowiedź SO ) to:
Swift 3.0+ (3.0, 3.1, 3.2, 4.0)
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ń:
źródło
To rozszerzenie typu String usuwa wszystkie białe znaki z ciągu, a nie tylko końcowe spacje ...
Przykład:
źródło
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):
Rezultatem będzie:
źródło
Możesz też użyć wyrażenia regularnego.
źródło
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ć:
Możesz także tworzyć własne zestawy znaków, aby przycinać granice swoich ciągów, np .:
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:
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ć:
... 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:
źródło
Dla Swift 3.0
źródło
Szybki 4
Doskonały przypadek użycia wyrażenia regularnego:
źródło
Użyłbym tego rozszerzenia, aby być elastycznym i naśladować sposób, w jaki robią to inne kolekcje:
źródło
Jeśli chcesz usunąć spacje z przodu (iz tyłu), ale nie ze środka, użyj
stringByTrimmingCharactersInSet
Jeśli chcesz usunąć spacje z dowolnego miejsca w ciągu, możesz spojrzeć na stringByReplacing ...
źródło
" First Word "
wyjściowe"First Word"
).Swift 4, 4,2 i 5
Usuń przestrzeń tylko z przodu i z końca
Usuń spacje z każdego miejsca w ciągu
źródło
Możesz też tego spróbować
źródło
Wypróbuj programowanie funkcjonalne, aby usunąć spacje:
źródło
źródło
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.
a wynik będzie
źródło
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:
Metoda 2:
źródło
Wersja Swift 3
źródło
Przycinanie białych spacji w Swift 4
źródło
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)
źródło
U mnie następująca linia służyła do usuwania białych znaków.
źródło
źródło
Wersja Swift 3 odpowiedzi BadmintonCat
źródło
whitespaceCharacterSet
najlepiej jest ich używać.źródło
Aby usunąć wszystkie spacje z ciągu:
źródło