Rozważmy następujący przykład:
" Hello this is a long string! "
Chcę przekonwertować to na:
"Hello this is a long string!"
objective-c
ios
nsstring
hfossli
źródło
źródło
Regex i NSCharacterSet są tutaj, aby Ci pomóc. To rozwiązanie usuwa początkowe i końcowe białe znaki, a także wiele białych znaków.
Logowanie
final
dajeMożliwe alternatywne wzorce regex:
[ ]+
[ \\t]+
\\s+
Podsumowanie wydajności
Łatwość rozbudowy, wydajność, liczba wierszy kodu i liczba tworzonych obiektów sprawia, że jest to odpowiednie rozwiązanie.
źródło
stringByReplacingOccurrencesOfString:
. Nie mogę uwierzyć, że tego nie wiedziałem.Właściwie jest na to bardzo proste rozwiązanie:
( Źródło )
źródło
Z wyrażeniem regularnym, ale bez potrzeby korzystania z żadnej zewnętrznej struktury:
źródło
NSRegularExpressionSearch
mówi, że działa tylko zrangeOfString:...
metodamiJednoliniowe rozwiązanie:
źródło
To powinno wystarczyć ...
źródło
Inną opcją dla wyrażenia regularnego jest RegexKitLite , który można bardzo łatwo osadzić w projekcie iPhone'a:
źródło
Spróbuj tego
źródło
Oto fragment
NSString
rozszerzenia, gdzie"self"
jestNSString
instancja. Można go użyć do zwinięcia ciągłych białych znaków w jedną spację, przekazując[NSCharacterSet whitespaceAndNewlineCharacterSet]
i' '
do dwóch argumentów.źródło
Alternatywne rozwiązanie: zdobądź kopię OgreKit (biblioteka wyrażeń regularnych Cocoa).
Cała funkcja jest zatem:
Krótkie i słodkie.
Jeśli szukasz najszybszego rozwiązania, starannie skonstruowana seria instrukcji z użyciem
NSScanner
prawdopodobnie zadziałaby najlepiej, ale byłoby to konieczne tylko wtedy, gdy planujesz przetwarzać ogromne (wiele megabajtów) bloki tekstu.źródło
według @Mathieu Godart jest najlepszą odpowiedzią, ale brakuje jakiejś linii, wszystkie odpowiedzi po prostu zmniejszają odstępy między słowami, ale jeśli mają tabulatory lub mają spację w miejscu, na przykład: "to jest tekst \ t i \ tTab między, tak dalej ”w trzywierszowym kodzie będziemy: ciąg, który chcemy zredukować
wynik to
bez wymiany zakładki wynik będzie:
źródło
Możesz także użyć prostego argumentu while. Nie ma tam magii RegEx, więc może łatwiej będzie to zrozumieć i zmienić w przyszłości:
źródło
Następujące dwa wyrażenia regularne działałyby w zależności od wymagań
Następnie zastosuj metodę instancji nsstring,
stringByReplacingOccurrencesOfString:withString:options:range:
aby zastąpić je pojedynczym odstępem.na przykład
Uwaga: nie korzystałem z biblioteki „RegexKitLite” dla powyższej funkcjonalności dla iOS 5.x i nowszych.
źródło