Ответ 1
Обновлен для Swift 4
Проверка начала строки и заканчивается на
Вы можете использовать методы hasPrefix(_:)
и hasSuffix(_:)
для проверки равенства с другой строкой.
let str = "Hello, playground"
if str.hasPrefix("Hello") { // true
print("Prefix exists")
}
if str.hasSuffix("ground") { // true
print("Suffix exists")
}
Получение фактических префиксных и суффиксных подстрок
Чтобы получить фактическую префиксную или суффиксную подстроку, вы можете использовать один из следующих способов. Я рекомендую для него первый метод простоты. Все методы используют str
как
let str = "Hello, playground"
Метод 1: (рекомендуется) prefix(Int)
и suffix(Int)
let prefix = String(str.prefix(5)) // Hello
let suffix = String(str.suffix(6)) // ground
Это лучший метод, на мой взгляд. В отличие от методов 2 и 3 ниже, этот метод не будет сбой, если индексы выйдут за пределы. Он просто вернет все символы в строке.
let prefix = String(str.prefix(225)) // Hello, playground
let suffix = String(str.suffix(623)) // Hello, playground
Конечно, иногда сбои хороши, потому что они сообщают вам, что есть проблема с вашим кодом. Поэтому рассмотрим второй метод ниже. Он выдает ошибку, если индекс выходит за пределы.
Способ 2: prefix(upto:)
и suffix(from:)
Индексы Swift String сложны, потому что они должны учитывать специальные символы (например, emoji). Однако, как только вы получите индекс, легко получить префикс или суффикс. (См. мой другой ответ на 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
Если вы хотите защитить от выхода за пределы, вы можете сделать индекс, используя limitedBy
(опять же, см. этот ответ).
Метод 3: индексы
Так как String является набором, вы можете использовать индексы для получения префикса и суффикса.
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