2015-10-06 16 views
53

Tôi đang cố kiểm tra xem chuỗi Swift có bắt đầu hoặc kết thúc bằng một giá trị nhất định hay không. Những phương pháp này không tồn tại:Cách kiểm tra xem Chuỗi bắt đầu bằng gì (tiền tố) hoặc kết thúc bằng (hậu tố) trong Swift

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

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

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

(tôi stumbled trên câu trả lời khi tôi đang đọc the documentation, và vì một câu trả lời SO không đưa ra với các điều kiện tìm kiếm của tôi, tôi đang bổ sung thêm Q của tôi & Một ở đây.)

Trả lời

101

cập nhật cho Swift 4

kiểm tra những gì một chuỗi bắt đầu với và kết thúc với

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

let str = "Hello, playground" 

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

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

Lấy thực tế Prefix và Suffix chuỗi con

Để có được tiền tố hoặc hậu tố thực tế chuỗi, bạn có thể sử dụng một trong những phương pháp sau đây. Tôi đề nghị phương pháp đầu tiên cho sự đơn giản của nó. Tất cả các phương pháp sử dụng str như

let str = "Hello, playground" 

Phương pháp 1: (Recommended) 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 trong quan điểm của tôi. Không giống như các phương thức 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 vượt quá 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 có sự cố 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 là tốt. Nó sẽ ném một lỗi nếu chỉ mục vượt quá giới hạn.

Cách 2: prefix(upto:)suffix(from:)

chỉ Chuỗi Swift là khó khăn vì họ phải đưa vào tài khoản 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 nó rất dễ dàng để có được tiền tố hoặc hậu tố. (Xem my other answer 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 bảo vệ chống lại đi ra ngoài giới hạn, bạn có thể làm cho một chỉ số sử dụng limitedBy (một lần nữa, xem this answer).

Phương pháp 3: subscript

Kể từ String là một bộ sưu tập, bạn có thể sử dụng kí hiệu để có được những 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 

Tiếp tục đọc

2

Prefix và Suffix Bình đẳng

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

Apple Doc

Các vấn đề liên quan