2016-12-31 14 views
7

nhiều ví dụ trong SO đang sửa chữa cả hai mặt, hàng đầu và đuôi. Yêu cầu của tôi chỉ là về dấu vết. văn bản đầu vào của tôi là: "giữ bên trái của tôi" đầu ra mong muốn: "giữ bên trái của tôi"Xóa bỏ các dấu cách CHỈ TRÊN từ chuỗi

Tất nhiên lệnh này sẽ loại bỏ cả hai đầu:

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

Mà sẽ không làm việc cho tôi.

Tôi có thể làm như thế nào?

+0

Làm thế nào về 'rangeOfCharacter (từ: .whitespaceAndNewlines.inverted)'? – jtbandes

Trả lời

9

Một khá giải pháp đơn giản là biểu hiện thường xuyên, các mô hình là một hoặc nhiều (+) ký tự khoảng trắng (\s) ở phần cuối của chuỗi ($)

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

Bạn có thể sử dụng chức năng rangeOfCharacter trên chuỗi ký tự. Phần mở rộng này sau đó sử dụng đệ quy của có nhiều không gian để cắt. Điều này sẽ hiệu quả nếu bạn chỉ thường có một số lượng nhỏ không gian.

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)

lợi nhuận

"1234"

0

Xây dựng về câu trả lời của tôi vadian tìm thấy cho Swift 3 tại thời điểm viết bài mà tôi đã phải bao gồm một tham số phạm vi. Vì vậy:

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 
} 
Các vấn đề liên quan