อัปเดตสำหรับ Swift 4
การตรวจสอบว่า String เริ่มต้นด้วยและลงท้ายด้วยอะไร
คุณสามารถใช้hasPrefix(_:)
และhasSuffix(_:)
วิธีการเพื่อทดสอบความเท่าเทียมกับสตริงอื่น
let str = "Hello, playground"
if str.hasPrefix("Hello") {
print("Prefix exists")
}
if str.hasSuffix("ground") {
print("Suffix exists")
}
รับค่าคำนำหน้าและคำต่อท้ายจริง
เพื่อให้ได้คำนำหน้าหรือสตริงย่อยที่แท้จริงคุณสามารถใช้หนึ่งในวิธีต่อไปนี้ ฉันขอแนะนำวิธีแรกสำหรับความเรียบง่าย วิธีการทั้งหมดใช้str
เป็น
let str = "Hello, playground"
วิธีที่ 1: (แนะนำ) prefix(Int)
และsuffix(Int)
let prefix = String(str.prefix(5))
let suffix = String(str.suffix(6))
นี่เป็นวิธีที่ดีกว่าในความคิดของฉัน ไม่เหมือนกับวิธีที่ 2 และ 3 ด้านล่างวิธีนี้จะไม่ผิดพลาดหากดัชนีอยู่นอกขอบเขต มันจะส่งคืนอักขระทั้งหมดในสตริง
let prefix = String(str.prefix(225))
let suffix = String(str.suffix(623))
แน่นอนว่าการขัดข้องในบางครั้งเป็นเรื่องดีเพราะจะแจ้งให้คุณทราบว่ามีปัญหากับโค้ดของคุณ ดังนั้นให้พิจารณาวิธีที่สองด้านล่างด้วย มันจะทำให้เกิดข้อผิดพลาดหากดัชนีออกนอกขอบเขต
วิธีที่ 2: prefix(upto:)
และsuffix(from:)
ดัชนี Swift String นั้นยุ่งยากเพราะต้องคำนึงถึงอักขระพิเศษ (เช่นอิโมจิ) อย่างไรก็ตามเมื่อคุณได้รับดัชนีแล้วคุณสามารถรับคำนำหน้าหรือคำต่อท้ายได้อย่างง่ายดาย (โปรดดูคำตอบอื่น ๆ ของฉันบนString.Index
.)
let prefixIndex = str.index(str.startIndex, offsetBy: 5)
let prefix = String(str.prefix(upTo: prefixIndex))
let suffixIndex = str.index(str.endIndex, offsetBy: -6)
let suffix = String(str.suffix(from: suffixIndex))
หากคุณต้องการป้องกันการออกนอกขอบเขตคุณสามารถสร้างดัชนีโดยใช้limitedBy
(ดูคำตอบนี้อีกครั้ง)
วิธีที่ 3: ตัวห้อย
เนื่องจาก String เป็นคอลเล็กชันคุณสามารถใช้ตัวห้อยเพื่อรับคำนำหน้าและคำต่อท้าย
let prefixIndex = str.index(str.startIndex, offsetBy: 5)
let prefix = String(str[..<prefixIndex])
let suffixIndex = str.index(str.endIndex, offsetBy: -6)
let suffix = String(str[suffixIndex...])
อ่านเพิ่มเติม