Як перевірити, з чого починається рядок (префікс) або закінчується (суфікс) у Swift


102

Я намагаюся перевірити, починається чи закінчується рядок Swift з певним значенням. Ці методи не існують:

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

Я також хотів би отримати рядки префікса та суфікса. Я міг би знайти підрядку, на що відповідають тут і тут , але діапазони - такий біль у Свіфта.

Чи є простіший спосіб зробити це?

(Я наткнувся на відповідь, коли я читав документацію , і оскільки відповідь ТА не підійшов для моїх пошукових термінів, я додаю тут свої запитання та запитання.)

Відповіді:


204

Оновлено для Swift 4

Перевірка того, з чого починається і закінчується String

Ви можете використовувати 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 є складними, оскільки вони повинні враховувати спеціальні символи (наприклад, емодзі). Однак, як тільки ви отримаєте індекс, легко отримати префікс або суфікс. (Див мій інший відповідь на 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

Подальше читання


5

Префікс і рівність суфіксів

Щоб перевірити, чи має рядок певний рядковий префікс або суфікс, зателефонуйте до методу hasPrefix ( :) та hasSuffix ( :), обидва з яких беруть один аргумент типу String та повертають булеве значення.

Apple Doc

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.