Cách kiểm tra chuỗi bắt đầu bằng (tiền tố) hoặc kết thúc bằng (hậu tố) trong Swift


102

Tôi đang cố gắng kiểm tra xem một chuỗi Swift bắt đầu hoặc kết thúc bằng một giá trị nhất định. Các phương pháp này không tồn tại:

var str = "Hello, playground"
str.startsWith("Hello") // error
str.endsWith("ground") // error

Tôi cũng muốn lấy chuỗi tiền tố và hậu tố. Tôi có thể tìm thấy một chuỗi con, như được trả lời ở đâyở đây , nhưng phạm vi là một vấn đề khó khăn trong Swift.

Có cách nào dễ dàng hơn để làm điều đó không?

(Tôi tình cờ gặp câu trả lời khi tôi đang đọc tài liệu và vì câu trả lời SO không xuất hiện cho các cụm từ tìm kiếm của tôi, nên tôi đang thêm phần Hỏi & Đáp của mình tại đây.)

Câu trả lời:


204

Đã cập nhật cho Swift 4

Kiểm tra chuỗi bắt đầu bằng và kết thúc bằng gì

Bạn có thể sử dụng các phương thức hasPrefix(_:)hasSuffix(_:)để kiểm tra tính bình đẳng với một Chuỗi khác.

let str = "Hello, playground"

if str.hasPrefix("Hello") { // true
    print("Prefix exists")
}

if str.hasSuffix("ground") { // true
    print("Suffix exists")
}

Lấy tiền tố thực tế và chuỗi con hậu tố

Để nhận tiền tố hoặc chuỗi con hậu tố thực tế, bạn có thể sử dụng một trong các phương pháp sau. Tôi đề xuất phương pháp đầu tiên vì nó đơn giản. Tất cả các phương pháp sử dụng strnhư

let str = "Hello, playground"

Phương pháp 1: (Khuyến nghị) prefix(Int)suffix(Int)

let prefix = String(str.prefix(5)) // Hello
let suffix = String(str.suffix(6)) // ground

Đây là phương pháp tốt hơn theo ý kiến ​​của tôi. Không giống như các phương pháp 2 và 3 bên dưới, phương pháp này sẽ không sụp đổ nếu các chỉ mục đi ra ngoài giới hạn. Nó sẽ chỉ trả về tất cả các ký tự trong chuỗi.

let prefix = String(str.prefix(225)) // Hello, playground
let suffix = String(str.suffix(623)) // Hello, playground

Tất nhiên, đôi khi sự cố là tốt vì chúng cho bạn biết rằng có vấn đề với mã của bạn. Vì vậy, hãy xem xét phương pháp thứ hai bên dưới. Nó sẽ báo lỗi nếu chỉ mục đi ra ngoài giới hạn.

Phương pháp 2: prefix(upto:)suffix(from:)

Chỉ mục Swift String khá phức tạp vì chúng phải tính đến các ký tự đặc biệt (như biểu tượng cảm xúc). Tuy nhiên, một khi bạn nhận được chỉ mục, bạn sẽ dễ dàng nhận được tiền tố hoặc hậu tố. (Xem câu trả lời khác của tôi trên String.Index.)

let prefixIndex = str.index(str.startIndex, offsetBy: 5)
let prefix = String(str.prefix(upTo: prefixIndex)) // Hello

let suffixIndex = str.index(str.endIndex, offsetBy: -6)
let suffix = String(str.suffix(from: suffixIndex)) // ground

Nếu bạn muốn đề phòng việc đi ra ngoài giới hạn, bạn có thể tạo chỉ mục bằng cách sử dụng limitedBy(một lần nữa, hãy xem câu trả lời này ).

Phương pháp 3: đăng ký

Vì Chuỗi là một tập hợp, bạn có thể sử dụng các chỉ số phụ để lấy tiền tố và hậu tố.

let prefixIndex = str.index(str.startIndex, offsetBy: 5)
let prefix = String(str[..<prefixIndex]) // Hello

let suffixIndex = str.index(str.endIndex, offsetBy: -6)
let suffix = String(str[suffixIndex...]) // ground

Đọc thêm


5

Bình đẳng tiền tố và hậu tố

Để kiểm tra xem một chuỗi có tiền tố hoặc hậu tố chuỗi cụ thể hay không, hãy gọi các phương thức hasPrefix ( :) và hasSuffix ( :) của chuỗi , cả hai phương thức này nhận một đối số duy nhất của kiểu String và trả về một giá trị Boolean.

Apple Doc

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.