Zaktualizowano dla Swift 4
Sprawdzanie, czym String zaczyna się, a czym kończy
Możesz użyć metod hasPrefix(_:)
i hasSuffix(_:)
, aby przetestować równość z innym ciągiem znaków.
let str = "Hello, playground"
if str.hasPrefix("Hello") { // true
print("Prefix exists")
}
if str.hasSuffix("ground") { // true
print("Suffix exists")
}
Pobieranie rzeczywistego prefiksu i podciągów sufiksu
Aby uzyskać rzeczywisty fragment prefiksu lub sufiksu, możesz użyć jednej z następujących metod. Polecam pierwszą metodę ze względu na jej prostotę. Wszystkie metody używają str
jako
let str = "Hello, playground"
Metoda 1: (zalecane) prefix(Int)
isuffix(Int)
let prefix = String(str.prefix(5)) // Hello
let suffix = String(str.suffix(6)) // ground
Moim zdaniem to lepsza metoda. W przeciwieństwie do metod 2 i 3 poniżej, ta metoda nie ulegnie awarii, jeśli indeksy wyjdą poza granice. Po prostu zwróci wszystkie znaki w ciągu.
let prefix = String(str.prefix(225)) // Hello, playground
let suffix = String(str.suffix(623)) // Hello, playground
Oczywiście czasami awarie są dobre, ponieważ informują o problemie z Twoim kodem. Rozważ więc również drugą metodę poniżej. Jeśli indeks wyjdzie poza granice, zwróci błąd.
Metoda 2: prefix(upto:)
isuffix(from:)
Indeksy Swift String są trudne, ponieważ muszą uwzględniać znaki specjalne (takie jak emoji). Jednak po uzyskaniu indeksu łatwo jest uzyskać przedrostek lub sufiks. (Zobacz inne moje odpowiedzi na 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
Jeśli chcesz ustrzec się przed przekroczeniem granic, możesz utworzyć indeks za pomocą limitedBy
(ponownie, zobacz tę odpowiedź ).
Metoda 3: indeksy dolne
Ponieważ String jest kolekcją, możesz użyć indeksów dolnych, aby uzyskać przedrostek i 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
Dalsze czytanie