2016-12-31 5 views
7

многие примеры в SO фиксируют обе стороны, ведущие и конечные. Моя просьба касается только о завершении. Мой ввод текста: «держать левую сторону» Желаемая выход: «держать левую сторону»Swift удалить ТОЛЬКО конечные пробелы из строки

Конечно эта команда удалит оба конца:

let cleansed = messageText.trimmingCharacters(in: .whitespacesAndNewlines) 

Который не будет работать для меня.

Как я могу это сделать?

+0

Как насчет 'rangeOfCharacter (from: .whitespaceAndNewlines.inverted)'? – jtbandes

ответ

9

Довольно простое решение регулярное выражение, шаблон один или несколько (+) пробельные символы (\s) в конце строки ($)

let string = " keep my left side " 
let cleansed = string.replacingOccurrences(of: "\\s+$", 
             with: "", 
             options: .regularExpression) 
1

Вы можете использовать функцию 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"

0

Строительство на ответ vadian, я нашел для 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 
}