Как удалить пробельный набор символов из строки, но сохранить пробелы между словами. Я хотел бы удалить двойные пробелы и тройные пробелы и т.д.
Удалить символ пробела из строки, исключая пробел
Ответ 1
Swift 3
extension String {
func condensingWhitespace() -> String {
return self.components(separatedBy: .whitespacesAndNewlines)
.filter { !$0.isEmpty }
.joined(separator: " ")
}
}
let string = " Lorem \r ipsum dolar sit amet. "
print(string.condensingWhitespace())
// Lorem ipsum dolar sit amet.
Legacy Swift
NSCharacterSet
делает это легко:
func condenseWhitespace(string: String) -> String {
let components = string.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).filter({!isEmpty($0)})
return join(" ", components)
}
var string = " Lorem \r ipsum dolar sit amet. "
println(condenseWhitespace(string))
// Lorem ipsum dolar sit amet.
или если вы хотите использовать его как расширение String
:
extension String {
func condenseWhitespace() -> String {
let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).filter({!Swift.isEmpty($0)})
return " ".join(components)
}
}
var string = " Lorem \r ipsum dolar sit amet. "
println(string.condenseWhitespace())
// Lorem ipsum dolar sit amet.
Все кредиты сообщение NSHipster на NSCharacterSet.
Ответ 2
Совместимый с Swift 2 код:
extension String {
var removeExcessiveSpaces: String {
let components = self.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
let filtered = components.filter({!$0.isEmpty})
return filtered.joinWithSeparator(" ")
}
}
Использование:
let str = "test spaces too many"
print(str.removeExcessiveSpaces)
// Output: test spaces too many
Ответ 3
Если у вас есть фон Objective-C/Foundation, может показаться очевидным использование componentsSeparatedByCharactersInSet(:)
с помощью Swift, чтобы обрезать строку из избыточных символов пробела.
Здесь вы можете получить из вашей строки массив String
, где все символы пробелов были заменены пустыми строками, чтобы отфильтровать этот массив в новый массив String
, где все пустые строки были удалены и присоедините все строки этого массива к новой строке, разделяя их пробельным символом.
Следующий код игровой площадки показывает, как это сделать:
import Foundation
let string = " Lorem ipsum dolar sit amet. "
let newString = string
.componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
.filter { !$0.isEmpty }
.joinWithSeparator(" ")
print(newString) // prints "Lorem ipsum dolar sit amet."
Если вам нужно повторить эту операцию, вы можете реорганизовать свой код в расширение String
:
import Foundation
extension String {
func condenseWhitespace() -> String {
return componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
.filter { !$0.isEmpty }
.joinWithSeparator(" ")
}
}
let string = " Lorem ipsum dolar sit amet. "
let newString = string.condenseWhitespace()
print(newString) // prints "Lorem ipsum dolar sit amet."
Однако, с Swift, существует еще один способ, который действительно работает и который не требует импорта Foundation
.
Здесь вы можете получить из своей строки массив String.CharacterView
, где все символы пробелов были удалены, чтобы сопоставить этот массив String.CharacterView
с массивом String
и присоединиться ко всем строкам этого массива в новую строку, разделяя их пробельным символом.
Следующий код игровой площадки показывает, как это сделать:
let string = " Lorem ipsum dolar sit amet. "
let newString = string.characters
.split { $0 == " " }
.map { String($0) }
.joinWithSeparator(" ")
print(newString) // prints "Lorem ipsum dolar sit amet."
Если вам нужно повторить эту операцию, вы можете реорганизовать свой код в расширение String
:
extension String {
func condenseWhitespace() -> String {
return characters
.split { $0 == " " }
.map { String($0) }
.joinWithSeparator(" ")
}
}
let string = " Lorem ipsum dolar sit amet. "
let newString = string.condenseWhitespace()
print(newString) // prints "Lorem ipsum dolar sit amet."
Ответ 4
Для быстрого 3.1
extension String {
var trim : String {
get {
return characters
.split { $0 == " " || $0 == "\r" }
.map { String($0) }
.joined(separator: " ")
}
}
}
let string = " Lorem \r ipsum dolar sit amet. "
print(string.trim)
Будет выводиться:
Lorem ipsum dolar sit amet.
Ответ 5
Другой вариант - использовать поиск регулярных выражений, чтобы заменить все появление одного или нескольких пробельных символов одним пространством. Пример (Swift 3):
let string = " Lorem \r ipsum dolar sit amet. "
let condensed = string
.replacingOccurrences(of: "\\s+", with: " ", options: .regularExpression)
.trimmingCharacters(in: .whitespacesAndNewlines)
print(condensed.debugDescription) // "Lorem ipsum dolar sit amet."
Ответ 6
Вы можете использовать метод trim() в расширении Swift String, который я написал https://bit.ly/JString.
var string = "hello "
var trimmed = string.trim()
println(trimmed)// "hello"