Swift удаляет только конечные пробелы из строки
многие примеры в SO фиксируют обе стороны, ведущую и конечную. Моя просьба касается только трейлинга. Мой входной текст: "держите мою левую сторону " Желаемый результат: "держите мою левую сторону"
конечно, эта команда удалит оба конца:
let cleansed = messageText.trimmingCharacters(in: .whitespacesAndNewlines)
который не будет работать для меня.
Как я могу это сделать?
3 ответов
довольно простым решением является регулярное выражение, шаблон один или более(+
) пробельные символы(\s
) в конце строки($
)
let string = " keep my left side "
let cleansed = string.replacingOccurrences(of: "\s+$",
with: "",
options: .regularExpression)
вы можете использовать функцию rangeOfCharacter для строки с набором символов. Это расширение затем использует рекурсию есть несколько пробелов для обрезки. Это будет эффективно, если у вас обычно есть только небольшое количество пробелов.
extension String {
func trailingTrim(_ characterSet : CharacterSet) -> String {
if let range = rangeOfCharacter(from: characterSet, options: [.anchored, .backwards]) {
return self.substring(to: range.lowerBound).trailingTrim(characterSet)
}
return self
}
}
"1234 ".trailingTrim(.whitespaces)
возвращает
"1234"
основываясь на ответе вадиана, я нашел для Swift 3 во время написания, что я должен был включить параметр диапазона. Итак:
func trailingTrim(with string : String) -> String {
let start = string.startIndex
let end = string.endIndex
let range: Range<String.Index> = Range<String.Index>(start: start, end: end)
let cleansed:String = string.stringByReplacingOccurrencesOfString("\s+$",
withString: "",
options: .RegularExpressionSearch,
range: range)
return cleansed
}