So überprüfen Sie, womit ein String in Swift beginnt (Präfix) oder mit (Suffix) endet

102

Ich versuche zu testen, ob eine Swift-Zeichenfolge mit einem bestimmten Wert beginnt oder endet. Diese Methoden existieren nicht:

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

Ich möchte auch die Präfix- und Suffix-Zeichenfolgen erhalten. Ich könnte einen Teilstring finden, wie hier und hier beantwortet wird , aber Bereiche sind in Swift so ein Schmerz.

Gibt es einen einfacheren Weg, dies zu tun?

(Ich bin beim Lesen der Dokumentation auf die Antwort gestoßen , und da für meine Suchbegriffe keine SO-Antwort gefunden wurde, füge ich hier meine Fragen und Antworten hinzu.)

Suragch
quelle

Antworten:

204

Aktualisiert für Swift 4

Überprüfen, womit ein String beginnt und womit endet

Mit den Methoden hasPrefix(_:)und hasSuffix(_:)können Sie die Gleichheit mit einem anderen String testen.

let str = "Hello, playground"

if str.hasPrefix("Hello") { // true
    print("Prefix exists")
}

if str.hasSuffix("ground") { // true
    print("Suffix exists")
}

Abrufen der tatsächlichen Präfix- und Suffix-Teilzeichenfolgen

Um den tatsächlichen Präfix- oder Suffix-Teilstring zu erhalten, können Sie eine der folgenden Methoden verwenden. Ich empfehle die erste Methode für die Einfachheit. Alle Methoden verwenden strals

let str = "Hello, playground"

Methode 1: (empfohlen) prefix(Int)undsuffix(Int)

let prefix = String(str.prefix(5)) // Hello
let suffix = String(str.suffix(6)) // ground

Dies ist meiner Meinung nach die bessere Methode. Im Gegensatz zu den folgenden Methoden 2 und 3 stürzt diese Methode nicht ab, wenn die Indizes außerhalb der Grenzen liegen. Es werden nur alle Zeichen in der Zeichenfolge zurückgegeben.

let prefix = String(str.prefix(225)) // Hello, playground
let suffix = String(str.suffix(623)) // Hello, playground

Natürlich sind Abstürze manchmal gut, weil sie Sie wissen lassen, dass ein Problem mit Ihrem Code vorliegt. Betrachten Sie also auch die zweite Methode unten. Es wird ein Fehler ausgegeben, wenn der Index außerhalb der Grenzen liegt.

Methode 2: prefix(upto:)undsuffix(from:)

Swift String-Indizes sind schwierig, da sie Sonderzeichen (wie Emoji) berücksichtigen müssen. Sobald Sie jedoch den Index erhalten haben, ist es einfach, das Präfix oder Suffix zu erhalten. (Siehe meine andere Antwort auf 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

Wenn Sie sich vor Überschreitungen schützen möchten, können Sie mit einen Index erstellen limitedBy(siehe auch diese Antwort ).

Methode 3: Indizes

Da String eine Sammlung ist, können Sie Indizes verwenden, um das Präfix und das Suffix abzurufen.

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

Weiterführende Literatur

Suragch
quelle
5

Präfix- und Suffixgleichheit

Um zu überprüfen, ob eine Zeichenfolge ein bestimmtes Zeichenfolgenpräfix oder -suffix hat, rufen Sie die Methoden hasPrefix ( :) und hasSuffix ( :) der Zeichenfolge auf , die beide ein einzelnes Argument vom Typ String verwenden und einen booleschen Wert zurückgeben.

Apple Doc

Gobi M.
quelle