@mattdipasquale trim jest bardzo popularną nazwą tej operacji
Austin,
Odpowiedzi:
831
Oto jak usunąć wszystkie białe znaki od początku i końca litery String.
(Przykład przetestowany z Swift 2.0 .)
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"
(Przykład przetestowany z Swift 3+ .)
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"
Nie działa na swif 1.2, ponieważ nie ma automatycznej konwencji od String do NSString.
elcuco
5
Działa dobrze w Swift 1.2 - obiekt String ma metodę stringByTrimmingCharactersInSet (nie jest to wyłączna metoda NSString)
Ben Dodson
8
W Swift 3.0 jest: niech trimmedString = myString.trimmingCharacters (w: .whitespaces)
kikettas 19.09.16
6
To nie znaczy, że jest przestarzały. Nie wszyscy jeszcze używają Swift 3.0.
c.dunlap
2
W Swift 3.0 nie spowoduje to usunięcia białych spacji między łańcuchami. Usunie tylko wiodące i końcowe białe spacje. W tym celu zapoznaj się z tą odpowiedzią: stackoverflow.com/a/39067610/4886069
130
Umieść ten kod na pliku w swoim projekcie, coś takiego jak Utils.swift:
Czy to jest bezpieczne? Jak zapobiec kolizji nazw metod, jeśli Apple lub biblioteka innej firmy doda tę samą metodę String?
ma11hew28,
12
Rozszerzenia są bezpieczne - w rzeczywistości Apple korzysta z nich w swoich wewnętrznych interfejsach API. Nie można zapobiec kolizjom nazw, a to w rzeczywistości jest dobre. Otrzymasz błąd kompilacji, gdy Apple w końcu doda metodę trim () i będziesz wiedział, że twoje rozszerzenie nie jest już wymagane. Rozszerzenia są dość eleganckie i umieszczają metody tam, gdzie są potrzebne, zamiast jakiejś niejasnej klasy narzędziowej, takiej jak StringUtils - mam problem, gdy klasa nie ma metody, której potrzebuję, ponieważ nie zaimportowano innych ram, które dodały do niej rozszerzenia.
absmaci
3
Hej, w Swift 3 powinien zostać zwróconyreturn self.trimmingCharacters(in: .whitespacesAndNewlines)
7
let result = „Hello World” .trim () // result = „HelloWorld” to nie usunie białych znaków zawartych w ciągu. usunie tylko spacje wiodące i końcowe.
Sahil
2
nie spowoduje to usunięcia spacji między łańcuchem. Usuwa tylko wiodące i końcowe miejsce. Tak więc lepszym sposobem na usunięcie spacji między ciągiem jest użycie tekstu? .ReplacingOccurrences (of: "", with: "") zamiast używania trimmingCharacters
Co jeśli chcę tylko przycinać końcowe i wiodące białe znaki?
Suragch
1
Jestem nowy w szybkich 3 rozszerzeniach. Jeśli biblioteka modyfikuje ciąg, a ja również modyfikuję ciąg, czy możliwe jest uzyskanie kolizji? Co się stanie, jeśli przyszłe wersje metody swift ad a trim ()? Więc… w zasadzie… czy korzystanie z rozszerzeń jest bezpieczne w ten sposób?
Gattster,
1
możliwe jest uzyskanie kolizji.
Alex Brown
let result = „Hello World” .trim () // result = „HelloWorld” to nie usunie białych znaków zawartych w ciągu. usunie tylko spacje wiodące i końcowe
Sahil
45
Swift 5 i 4.2
let trimmedString =" abc ".trimmingCharacters(in:.whitespaces)//trimmedString =="abc"
Właściwie to „białe znaki i linie”, haha, pozostało.
RainCast,
9
Tak, możesz to zrobić w następujący sposób:
var str =" this is the answer "
str = str.trimmingCharacters(in:CharacterSet.whitespacesAndNewlines)
print(srt)//"this is the answer"
CharacterSet to tak naprawdę potężne narzędzie do tworzenia reguły przycinania o wiele większej elastyczności niż wstępnie zdefiniowany zestaw, taki jak .whitespacesAndNewlines.
Na przykład:
var str =" Hello World !"let cs =CharacterSet.init(charactersIn:" !")
str = str.trimmingCharacters(in: cs)
print(str)//"Hello World"
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:LoremIpsumis simply dummy text of the
extensionString{/// EZSE: Trims white space and new line characters
publicmutatingfunc trim(){self=self.trimmed()}/// EZSE: Trims white space and new line characters, returns a new string
publicfunc trimmed()->String{returnself.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())}}
Stworzyłem tę funkcję, która pozwala wprowadzić ciąg znaków i zwraca listę ciągów przyciętych dowolnym znakiem
funcTrim(input:String, character:Character)->[String]{var collection:[String]=[String]()var index =0var 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
}
jak nie znalazłem sposobu, aby to zrobić w swift (kompiluje się i działa idealnie w swift 2.0)
czy możesz na przykład zdefiniować, co rozumiesz przez „przycinanie”? Ponieważ typem zwracanym jest [Ciąg], nie można wdrożyć tego, czego zażądał PO. (który zwraca ciąg znaków)
Odpowiedzi:
Oto jak usunąć wszystkie białe znaki od początku i końca litery
String
.(Przykład przetestowany z Swift 2.0 .)
(Przykład przetestowany z Swift 3+ .)
Mam nadzieję że to pomoże.
źródło
Umieść ten kod na pliku w swoim projekcie, coś takiego jak Utils.swift:
Będziesz mógł to zrobić:
Rozwiązanie Swift 3.0
Będziesz mógł to zrobić:
źródło
String
?return self.trimmingCharacters(in: .whitespacesAndNewlines)
W Swift 3.0
I możesz zadzwonić
źródło
Swift 5 i 4.2
źródło
Szybki 3
źródło
Tak, możesz to zrobić w następujący sposób:
CharacterSet to tak naprawdę potężne narzędzie do tworzenia reguły przycinania o wiele większej elastyczności niż wstępnie zdefiniowany zestaw, taki jak .whitespacesAndNewlines.
Na przykład:
źródło
Obetnij ciąg znaków do określonej długości
Jeśli wprowadziłeś blok zdania / tekstu i chcesz zapisać z niego tylko określoną długość tekstu. Dodaj następujące rozszerzenie do klasy
Posługiwać się
źródło
Możesz użyć metody trim () w rozszerzeniu Swift String, które napisałem https://bit.ly/JString .
źródło
Kolejny podobny sposób:
Posługiwać się:
źródło
Zaczerpnięte z mojego repozytorium: https://github.com/goktugyil/EZSwiftExtensions/commit/609fce34a41f98733f97dfd7b4c23b5d16416206
źródło
W Swift3 XCode 8 Final
Zauważ, że
CharacterSet.whitespaces
to nie jest już funkcja!(Ani też nie
NSCharacterSet.whitespaces
)źródło
// Swift 4.0 Usuń spacje i nowe linie
źródło
Możesz również wysyłać postacie, które chcesz przyciąć
źródło
Stworzyłem tę funkcję, która pozwala wprowadzić ciąg znaków i zwraca listę ciągów przyciętych dowolnym znakiem
jak nie znalazłem sposobu, aby to zrobić w swift (kompiluje się i działa idealnie w swift 2.0)
źródło
Nie zapomnij o
import Foundation
lubUIKit
.Wynik:
W przeciwnym razie otrzymasz:
źródło