Cara memeriksa apa yang dimulai dengan String (awalan) atau diakhiri dengan (sufiks) di Swift

102

Saya mencoba menguji apakah string Swift dimulai atau diakhiri dengan nilai tertentu. Metode ini tidak ada:

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

Saya juga ingin mendapatkan string awalan dan sufiks. Saya bisa menemukan substring, seperti yang dijawab di sini dan di sini , tetapi rentang sangat menyebalkan di Swift.

Apakah ada cara yang lebih mudah untuk melakukannya?

(Saya menemukan jawabannya ketika saya membaca dokumentasi , dan karena jawaban SO tidak muncul untuk istilah pencarian saya, saya menambahkan Q&A saya di sini.)

Suragch
sumber

Jawaban:

204

Diperbarui untuk Swift 4

Memeriksa dengan apa String dimulai dan diakhiri

Anda dapat menggunakan metode hasPrefix(_:)dan hasSuffix(_:)untuk menguji kesetaraan dengan String lain.

let str = "Hello, playground"

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

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

Mendapatkan Awalan Aktual dan Substring Akhiran

Untuk mendapatkan prefiks atau sufiks substring yang sebenarnya, Anda dapat menggunakan salah satu metode berikut. Saya merekomendasikan metode pertama karena kesederhanaannya. Semua metode digunakan strsebagai

let str = "Hello, playground"

Metode 1: (Disarankan) prefix(Int)dansuffix(Int)

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

Ini adalah metode yang lebih baik menurut saya. Berbeda dengan metode 2 dan 3 di bawah, metode ini tidak akan crash jika indeks melampaui batas. Ini hanya akan mengembalikan semua karakter dalam string.

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

Tentu saja, terkadang error itu bagus karena memberi tahu Anda bahwa ada masalah dengan kode Anda. Jadi pertimbangkan juga metode kedua di bawah ini. Ini akan membuat kesalahan jika indeks melampaui batas.

Metode 2: prefix(upto:)dansuffix(from:)

Indeks Swift String rumit karena harus mempertimbangkan karakter khusus (seperti emoji). Namun begitu Anda mendapatkan indeks, mudah untuk mendapatkan awalan atau sufiks. (Lihat jawaban saya yang lain di 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

Jika Anda ingin menjaga agar tidak keluar batas, Anda dapat membuat indeks menggunakan limitedBy(sekali lagi, lihat jawaban ini ).

Metode 3: langganan

Karena String adalah sebuah koleksi, Anda dapat menggunakan subskrip untuk mendapatkan prefiks dan sufiks.

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

Bacaan lebih lanjut

Suragch
sumber
5

Prefix dan Suffix Equality

Untuk memeriksa apakah sebuah string memiliki awalan atau akhiran string tertentu, panggil metode hasPrefix ( :) dan hasSuffix ( :) string , keduanya mengambil argumen tunggal bertipe String dan mengembalikan nilai Boolean.

Apple Doc

Gobi M
sumber