SWIFT проверка, начинается ли строка с чего-то, но второй символ может быть чем угодно - PullRequest
2 голосов
/ 18 марта 2020

Я новичок в использовании swift, поэтому я играю с ним и пытаюсь выяснить, как проверить, начинается ли данная строка со слова «привет», хотя вторая буква может быть чем угодно. это должен быть E, чтобы я мог набрать h0llo, и он все равно вернул бы true, вот чего я хочу достичь.

Это код, который у меня есть, однако, он перемешан повсюду с тестирование, поэтому любая помощь будет необходима на данном этапе для меня. Я только добавляю код, чтобы вы могли лучше понять, чего он пытается добиться

func check(_ givenString: String) -> Bool {
    var newString = givenString

    if newString.count > 2 {
        newString.remove(at: String.Index(encodedOffset: 2))
        if newString.hasPrefix("hello") {
            return true 
        } else {
            return false
        }
    }
}
print(check("h0llo"))

Ответы [ 2 ]

3 голосов
/ 18 марта 2020

Разумным решением является проверка с помощью регулярного выражения

func check(_ givenString: String) -> Bool {
    return givenString.range(of: "^h.llo", options: .regularExpression) != nil
}

Символ каретки ^ проверяет начало строки, а точка . представляет любой символ.

0 голосов
/ 18 марта 2020

Просто для полноты нативный подход Swift без использования регулярных выражений. Вы можете просто проверить, равен ли первый символ h, сместить вашу строку startIndex на 2 и проверить, имеет ли она префикс «llo»:

func check(_ string: String) -> Bool {
    guard string.count >= 5 else { return false }
    let index = string.index(string.startIndex, offsetBy: 2)
    return string.first == "h" && string[index...].hasPrefix("llo")
}

print(check("h0llo")) // "true\n"

В качестве альтернативы смещению строки startIndex Вы можете использовать метод сбора func dropFirst(_ k: Int = 1) -> Substring:

func check(_ string: String) -> Bool {
    guard string.count >= 5 else { return false }
    return string.first == "h" && string.dropFirst(2).hasPrefix("llo")
}

print(check("h0llo")) // "true\n"
...