Обновлено для Swift 4
Проверка того, чем строка начинается и заканчивается
Вы можете использовать hasPrefix(_:)
и hasSuffix(_:)
методы тестирования равенства с другой String.
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 сложны, потому что они должны учитывать специальные символы (например, эмодзи). Однако, как только вы получите индекс, легко получить префикс или суффикс. (См мой другой ответ на 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
Дальнейшее чтение